diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ServiceWorkOrdersController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ServiceWorkOrdersController.java index 72906e58..870364de 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ServiceWorkOrdersController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ServiceWorkOrdersController.java @@ -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 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 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 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 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 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 remove(@NotEmpty(message = "主键不能为空") diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ServiceWorkOrders.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ServiceWorkOrders.java index 932b39b5..2642cfa6 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ServiceWorkOrders.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ServiceWorkOrders.java @@ -47,7 +47,7 @@ public class ServiceWorkOrders extends TenantEntity { private Long type; /** - * 状态 + * 状态(0创建工单,1已派单2已抢单3处理中,4已完成,5已评价) */ private String status; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ServiceWorkOrdersType.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ServiceWorkOrdersType.java index 9d88bdfe..118998aa 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ServiceWorkOrdersType.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ServiceWorkOrdersType.java @@ -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; /** * 搜索值 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CostCarChargeBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CostCarChargeBo.java index e149f6be..54d530b1 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CostCarChargeBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CostCarChargeBo.java @@ -50,6 +50,11 @@ public class CostCarChargeBo extends BaseEntity { * 车位 */ private String location; + /** + * 车位名称 + */ + private String locationName; + /** * 缴费状态 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ServiceWorkOrdersTypeBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ServiceWorkOrdersTypeBo.java index aa7376a5..a9a15f6c 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ServiceWorkOrdersTypeBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ServiceWorkOrdersTypeBo.java @@ -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不支持) */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/enums/OrderReportingTypeEnum.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/enums/OrderReportingTypeEnum.java new file mode 100644 index 00000000..48b898ef --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/enums/OrderReportingTypeEnum.java @@ -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; + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/enums/OrderTypeOperationEnum.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/enums/OrderTypeOperationEnum.java new file mode 100644 index 00000000..72e9bb2c --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/enums/OrderTypeOperationEnum.java @@ -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; + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CostHouseChargeDetailVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CostHouseChargeDetailVo.java index 777a9e9c..24b326a8 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CostHouseChargeDetailVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CostHouseChargeDetailVo.java @@ -35,6 +35,10 @@ public class CostHouseChargeDetailVo implements Serializable { */ @ExcelProperty(value = "房屋") private Long roomId; + /** + * 房屋名称 + */ + private String roomName; /** * 业主 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CostHouseChargeVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CostHouseChargeVo.java index 29b63ee0..b2109a73 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CostHouseChargeVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CostHouseChargeVo.java @@ -42,6 +42,11 @@ public class CostHouseChargeVo implements Serializable { */ @ExcelProperty(value = "房屋") private Long roomId; + + /** + * 房屋名称 + */ + private String roomName; /** * 业主 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CostMeterWaterVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CostMeterWaterVo.java index 6e3a2185..815a6ddd 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CostMeterWaterVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CostMeterWaterVo.java @@ -45,6 +45,10 @@ public class CostMeterWaterVo implements Serializable { * 费用类型 */ private String costType; + /** + * 费用名称 + */ + private String costTypeName; /** * 房间id */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersInfoVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersInfoVo.java index 87a9e11f..67ab2f1e 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersInfoVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersInfoVo.java @@ -57,7 +57,10 @@ public class ServiceWorkOrdersInfoVo implements Serializable { */ @ExcelProperty(value = "权重") private String processingWeight; - + /** + * 运作模式(0派单+抢单,1派单,2自动派单) + */ + private String operationMode; /** * 状态 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersTypeVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersTypeVo.java index c6c49fab..9b44e8a4 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersTypeVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersTypeVo.java @@ -68,7 +68,10 @@ public class ServiceWorkOrdersTypeVo implements Serializable { */ @ExcelProperty(value = "是否支持转单(0支持,1不支持)") private Integer isTransfers; - + /** + * 权重(1一般2紧急3危急) + */ + private String processingWeight; /** * 搜索值 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersVo.java index 67a807cd..ec5db7b3 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersVo.java @@ -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; /** * 发起人 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/TbRoomMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/TbRoomMapper.java index caae3fe6..87a23973 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/TbRoomMapper.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/TbRoomMapper.java @@ -20,5 +20,5 @@ public interface TbRoomMapper extends BaseMapperPlus { //查询房间名称 String queryRoomName(Long roomId); - Map queryRoomNameList(@Param("ids") List ids); + List queryRoomNameList(@Param("ids") List ids); } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ITbRoomService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ITbRoomService.java index ea077fbe..a9a2dc56 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ITbRoomService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ITbRoomService.java @@ -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 queryRoomNameList(List ids); } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AssetTypeServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AssetTypeServiceImpl.java index 13ef526d..fad7357c 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AssetTypeServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AssetTypeServiceImpl.java @@ -73,7 +73,7 @@ public class AssetTypeServiceImpl implements IAssetTypeService { private LambdaQueryWrapper buildQueryWrapper(AssetTypeBo bo) { Map params = bo.getParams(); LambdaQueryWrapper 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; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostCarChargeServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostCarChargeServiceImpl.java index 7be26b05..ca8efbed 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostCarChargeServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostCarChargeServiceImpl.java @@ -82,6 +82,7 @@ public class CostCarChargeServiceImpl implements ICostCarChargeService { // List residentPersonIdList = result.getRecords().stream().map(vo -> vo.getPersonId()).distinct().collect(Collectors.toList()); // List remoteUserVos = remoteUserService.selectListByIds(residentPersonIdList); List residentPeoplelist = residentPersonMapper.selectList(); + List roomNames = roomService.queryRoomNameList(idList); result.getRecords().stream().forEach(s -> { if (CollUtil.isNotEmpty(residentPeoplelist)) { ResidentPerson residentPerson = residentPeoplelist.stream() diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostHouseChargeServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostHouseChargeServiceImpl.java index 76e391c5..2debf50a 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostHouseChargeServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostHouseChargeServiceImpl.java @@ -55,6 +55,7 @@ public class CostHouseChargeServiceImpl implements ICostHouseChargeService { private final ResidentPersonMapper residentPersonMapper; @DubboReference private RemoteUserService remoteUserService; + /** * 查询房屋收费 * @@ -66,12 +67,14 @@ public class CostHouseChargeServiceImpl implements ICostHouseChargeService { CostHouseChargeVo costHouseChargeVo = baseMapper.selectVoById(id); CostHouseChargeDetailVo costHouseChargeDetailVo = BeanUtil.copyProperties(costHouseChargeVo, CostHouseChargeDetailVo.class); CostItemsVo costItemsVo = costItemsMapper.selectVoById(costHouseChargeDetailVo.getCostItemsId()); - costHouseChargeDetailVo.setCostItemsVo(ObjectUtil.isNotEmpty(costItemsVo)?costItemsVo:null); + costHouseChargeDetailVo.setCostItemsVo(ObjectUtil.isNotEmpty(costItemsVo) ? costItemsVo : null); TbRoomVo tbRoomVo = tbRoomMapper.selectVoById(costHouseChargeDetailVo.getRoomId()); - costHouseChargeDetailVo.setRoomVo(ObjectUtil.isNotEmpty(tbRoomVo)?tbRoomVo:null); - ResidentPersonVo residentPersonVo = residentPersonMapper.selectVoById(costHouseChargeVo.getPersonId()); + costHouseChargeDetailVo.setRoomVo(ObjectUtil.isNotEmpty(tbRoomVo) ? tbRoomVo : null); + ResidentPersonVo residentPersonVo = residentPersonMapper.selectVoById(costHouseChargeVo.getPersonId()); //RemoteUserVo userInfo = remoteUserService.getUserInfoById(costHouseChargeVo.getPersonId()); - costHouseChargeDetailVo.setPersonName(ObjectUtil.isNotEmpty(residentPersonVo)?residentPersonVo.getUserName():null); + String roomName = tbRoomMapper.queryRoomName(costHouseChargeDetailVo.getRoomId()); + costHouseChargeDetailVo.setRoomName(StringUtils.isNotBlank(roomName) ? roomName : null); + costHouseChargeDetailVo.setPersonName(ObjectUtil.isNotEmpty(residentPersonVo) ? residentPersonVo.getUserName() : null); return costHouseChargeDetailVo; } @@ -91,7 +94,9 @@ public class CostHouseChargeServiceImpl implements ICostHouseChargeService { if (CollUtil.isNotEmpty(residentPeoplelist)) { 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); + 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); @@ -181,7 +186,7 @@ public class CostHouseChargeServiceImpl implements ICostHouseChargeService { @Transactional(rollbackFor = Exception.class) public Boolean returnFree(CostChargeReturnFeeBo bo) { CostHouseChargeVo costHouseChargeVo = baseMapper.selectVoById(bo.getId()); - Assert.isTrue(ObjectUtil.isNotEmpty(costHouseChargeVo),"该费用不存在"); + Assert.isTrue(ObjectUtil.isNotEmpty(costHouseChargeVo), "该费用不存在"); var CostReturnPayFee = new CostReturnPayFee().setItemId(costHouseChargeVo.getCostItemsId()) .setReturnNo(RandomUtil.randomNumbers(11)) .setReason(bo.getReason()) @@ -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()); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostMeterWaterServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostMeterWaterServiceImpl.java index 87110271..b8e5e537 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostMeterWaterServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostMeterWaterServiceImpl.java @@ -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 queryPageList(CostMeterWaterBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + if (CollUtil.isNotEmpty(result.getRecords())){ + //收集抄表类型id + List meterTypeIds = result.getRecords().stream().map(CostMeterWaterVo::getMeterTypeId).toList(); + List 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()); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostPayFeeAuditServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostPayFeeAuditServiceImpl.java index 6062d170..807db09b 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostPayFeeAuditServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostPayFeeAuditServiceImpl.java @@ -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); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetServiceImpl.java index c986c0b5..1f6eacf5 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetServiceImpl.java @@ -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) { diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentUnitServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentUnitServiceImpl.java index eea0eb33..7130b2de 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentUnitServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentUnitServiceImpl.java @@ -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 idList = Arrays.stream(residentUnitVo.getLocation().split(",")) + .map(String::trim) + .map(Long::parseLong) + .collect(Collectors.toList()); + + List 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); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java index 2d53d195..af6440aa 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java @@ -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,10 +78,12 @@ 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())); - RemoteUserVo userInfo = remoteUserService.getUserInfoById(Long.valueOf(serviceWorkOrdersVo.getHandler())); + RemoteUserVo userInfo = remoteUserService.getUserInfoById(Long.valueOf(serviceWorkOrdersVo.getHandler())); if (ObjectUtil.isNotEmpty(userInfo)) { serviceWorkOrdersInfoVo.setHandlerText(userInfo.getNickName()); serviceWorkOrdersInfoVo.setHandlerPhone(userInfo.getPhonenumber()); @@ -89,7 +98,7 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { serviceWorkOrdersRecordInfoVos.stream().forEach(workOrdersRecordVo -> { RemoteUserVo remoteUserVo = remoteUserVos.stream().filter(vo -> vo.getUserId() != null && vo.getUserId().equals(serviceWorkOrdersVo.getHandler())).findFirst().orElse(null); workOrdersRecordVo.setHandlerName(Objects.nonNull(remoteUserVo) ? remoteUserVo.getNickName() : null); - workOrdersRecordVo.setInitiatorPeople(Objects.nonNull(serviceWorkOrdersTypeVo)?serviceWorkOrdersVo.getInitiatorPeople():null); + workOrdersRecordVo.setInitiatorPeople(Objects.nonNull(serviceWorkOrdersTypeVo) ? serviceWorkOrdersVo.getInitiatorPeople() : null); if (workOrdersRecordVo.getStatus().equals("1") || workOrdersRecordVo.getStatus().equals("2")) { serviceWorkOrdersInfoVo.setDispatchTime(workOrdersRecordVo.getCreateTime()); } @@ -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().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; @@ -159,15 +170,15 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { private LambdaQueryWrapper buildQueryWrapper(ServiceWorkOrdersBo bo) { //查询类型下子类型id LambdaQueryWrapper OrdersTypeWrapper = new LambdaQueryWrapper<>(); - OrdersTypeWrapper.eq(ServiceWorkOrdersType::getParentId,bo.getType()); + OrdersTypeWrapper.eq(ServiceWorkOrdersType::getParentId, bo.getType()); List serviceWorkOrdersTypes = typesMapper.selectList(OrdersTypeWrapper); List typeIds = serviceWorkOrdersTypes.stream() .map(ServiceWorkOrdersType::getId) .collect(Collectors.toList()); typeIds.add(bo.getType()); List statusList = new ArrayList<>(); - if(StringUtils.isNotBlank(bo.getStatus())){ - statusList = Arrays.asList(bo.getStatus().split(",")); + if (StringUtils.isNotBlank(bo.getStatus())) { + statusList = Arrays.asList(bo.getStatus().split(",")); } Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); @@ -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 attendanceUserGroups = RedisUtils.getCacheList(DateUtil.today()); + if (CollUtil.isEmpty(attendanceUserGroups)) { + attendanceUserGroups = attendanceUserGroupMapper.selectList( + new LambdaQueryWrapper() + .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()); + } + /** * 修改【工单处理】 * @@ -242,17 +312,17 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { * 修改前的数据校验 */ private void validEntityBeforeUpdate(ServiceWorkOrders entity) { - Assert.isTrue(ObjectUtil.isNotEmpty(entity.getStatus()),"状态不能为空!"); + Assert.isTrue(ObjectUtil.isNotEmpty(entity.getStatus()), "状态不能为空!"); LambdaQueryWrapper ordersLambdaQueryWrapper = new LambdaQueryWrapper<>(); ordersLambdaQueryWrapper.eq(ServiceWorkOrdersRecord::getOrderId, entity.getId()); ordersLambdaQueryWrapper.eq(ServiceWorkOrdersRecord::getStatus, entity.getStatus()); boolean exists = workOrdersRecordMapper.exists(ordersLambdaQueryWrapper); //TODO 做一些数据校验,如唯一约束 - ServiceWorkOrdersRecord serviceWorkOrdersRecord = new ServiceWorkOrdersRecord(); - serviceWorkOrdersRecord.setOrderId(entity.getId()); - serviceWorkOrdersRecord.setStatus(entity.getStatus()); - serviceWorkOrdersRecord.setHandler(entity.getHandler()); - workOrdersRecordMapper.insert(serviceWorkOrdersRecord); + ServiceWorkOrdersRecord serviceWorkOrdersRecord = new ServiceWorkOrdersRecord(); + serviceWorkOrdersRecord.setOrderId(entity.getId()); + serviceWorkOrdersRecord.setStatus(entity.getStatus()); + serviceWorkOrdersRecord.setHandler(entity.getHandler()); + workOrdersRecordMapper.insert(serviceWorkOrdersRecord); } /** @@ -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 getList() { LambdaQueryWrapper serviceWorkOrdersWrapper = new LambdaQueryWrapper<>(); return baseMapper.selectList(serviceWorkOrdersWrapper); } + @Override public List> getServiceWorkOrdersHandler(String type) { return switch (type) { diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbRoomServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbRoomServiceImpl.java index 201661fa..305f579e 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbRoomServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbRoomServiceImpl.java @@ -158,5 +158,13 @@ public class TbRoomServiceImpl implements ITbRoomService { @Override public String queryRoomName(Long roomId) { return baseMapper.queryRoomName(roomId); + } /** + * 获取房间名称 + * @param + * @return 房间名称 + */ + @Override + public List queryRoomNameList(List ids) { + return baseMapper.queryRoomNameList(ids); } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/ServiceWorkOrderTasks.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/ServiceWorkOrderTasks.java index 206a798c..5d331c19 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/ServiceWorkOrderTasks.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/ServiceWorkOrderTasks.java @@ -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,48 +44,81 @@ 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 serviceWorkOrderList = workOrdersMapper.selectList( - new LambdaQueryWrapper() - .eq(ServiceWorkOrders::getStatus, WorkOrderStatusEnum.CREATE_ORDER.getValue())); - if(CollUtil.isNotEmpty(serviceWorkOrderList)){ - LocalDate today = LocalDate.now(); - List attendanceUserGroups = attendanceUserGroupMapper.selectList( - new LambdaQueryWrapper() - //查询今天上班的人员 - .le(AttendanceUserGroup::getStartDate, today) - .ge(AttendanceUserGroup::getEndDate, today) + LocalDate today = LocalDate.now(); + List attendanceUserGroups = attendanceUserGroupMapper.selectList( + new LambdaQueryWrapper() + //查询今天上班的人员 + .le(AttendanceUserGroup::getStartDate, today) + .ge(AttendanceUserGroup::getEndDate, today) + ); + if (CollUtil.isEmpty(attendanceUserGroups)) { + if (!RedisUtils.isExistsObject("today")) { + //缓存今天排班人员 + RedisUtils.setCacheList("today", attendanceUserGroups); + } + //查询工单类型 + List serviceWorkOrdersTypes = workOrdersTypeMapper.selectList( + new LambdaQueryWrapper() + .eq(ServiceWorkOrdersType::getOperationMode, OrderTypeOperationEnum.AUTOMATE_DISPATCH.getValue()) ); - serviceWorkOrderList.stream().forEach(s->{ - if(CollUtil.isNotEmpty(attendanceUserGroups)){ - attendanceUserGroups.stream().forEach(s1->{ + if (CollUtil.isEmpty(serviceWorkOrdersTypes)) { + //收集工单类型id + List typeIds = serviceWorkOrdersTypes.stream().map(ServiceWorkOrdersType::getId).toList(); + List serviceWorkOrderList = workOrdersMapper.selectList( + new LambdaQueryWrapper() + .eq(ServiceWorkOrders::getStatus, WorkOrderStatusEnum.CREATE_ORDER.getValue()) + .in(ServiceWorkOrders::getType, typeIds) + ); + if (CollUtil.isNotEmpty(serviceWorkOrderList)) { + serviceWorkOrderList.stream().forEach(s -> { + //获取处理人 + List 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()); + log.info("派单工单号为:{}", s.getOrderNo()); }); - }else { - log.info("当天无排班人员"); + } else { + log.info("派单工单为:{}", serviceWorkOrderList.size()); } - }); - }else { - log.info("派单工单为:{}",serviceWorkOrderList.size()); + } } } @@ -134,10 +171,10 @@ public class ServiceWorkOrderTasks { for (AttendanceUserGroup group : attendanceUserGroups) { Long employeeId = group.getEmployeeId(); // 可选:避免重新派给原处理人 - if (employeeId.equals(latestRecord.getHandler())) { - log.debug("跳过原处理人:{}", employeeId); - continue; - } + if (employeeId.equals(latestRecord.getHandler())) { + log.debug("跳过原处理人:{}", employeeId); + continue; + } // 创建新的派单记录 ServiceWorkOrdersRecord newRecord = new ServiceWorkOrdersRecord(); newRecord.setOrderId(workOrder.getId()); @@ -147,9 +184,9 @@ public class ServiceWorkOrderTasks { workOrdersRecordMapper.insert(newRecord); log.info("工单号:{} 已重新派发给员工ID:{}", workOrder.getOrderNo(), employeeId); // 6. 更新主工单状态(可选:若只保留最新记录状态,也可不更新主表) - workOrder.setStatus(WorkOrderStatusEnum.DISPATCHED.getValue()); // 仍为已派单 - workOrder.setHandler(employeeId); // 可清空,或设为最后一个人(根据业务) - workOrdersMapper.updateById(workOrder); + workOrder.setStatus(WorkOrderStatusEnum.DISPATCHED.getValue()); // 仍为已派单 + workOrder.setHandler(employeeId); // 可清空,或设为最后一个人(根据业务) + workOrdersMapper.updateById(workOrder); } }); } diff --git a/ruoyi-modules/Property/src/main/resources/mapper/Property/TbRoomMapper.xml b/ruoyi-modules/Property/src/main/resources/mapper/Property/TbRoomMapper.xml index fbe839ae..8be6fae2 100644 --- a/ruoyi-modules/Property/src/main/resources/mapper/Property/TbRoomMapper.xml +++ b/ruoyi-modules/Property/src/main/resources/mapper/Property/TbRoomMapper.xml @@ -15,9 +15,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where r.id=#{roomId} - SELECT - r.id, concat(c.community_name, b.building_name, f.floor_name, r.room_number) AS room_name FROM tb_room r