From 1e9efc77edbe9873ed0f296d2891572d92bde162 Mon Sep 17 00:00:00 2001 From: yuyongle <1150359267@qq.com> Date: Mon, 21 Jul 2025 20:56:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E5=B7=A5=E5=8D=95bu?= =?UTF-8?q?g?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CostMeterWaterController.java | 10 ++ .../controller/ServeceCustomerController.java | 36 +++++++ .../property/domain/ServiceWorkOrders.java | 2 +- .../domain/bo/CostReturnPayFeeBo.java | 9 +- .../domain/bo/ServiceWorkOrdersBo.java | 5 + .../domain/vo/ServeceCustomerCountVo.java | 52 ++++++++++ .../domain/vo/ServiceWorkOrdersInfoVo.java | 10 +- .../vo/ServiceWorkOrdersRecordInfoVo.java | 4 + .../domain/vo/ServiceWorkOrdersVo.java | 9 +- .../service/ICostMeterWaterService.java | 6 ++ .../service/IServiceWorkOrdersService.java | 7 ++ .../impl/CostCarChargeServiceImpl.java | 1 + .../impl/CostMeterWaterServiceImpl.java | 15 +++ .../impl/ResidentPersonServiceImpl.java | 11 ++- .../impl/ServiceWorkOrdersServiceImpl.java | 94 +++++++++++++------ 15 files changed, 225 insertions(+), 46 deletions(-) create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ServeceCustomerController.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServeceCustomerCountVo.java diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CostMeterWaterController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CostMeterWaterController.java index f63a9fb4..9cd89f4f 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CostMeterWaterController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CostMeterWaterController.java @@ -68,7 +68,17 @@ public class CostMeterWaterController extends BaseController { @PathVariable("id") Long id) { return R.ok(costMeterWaterService.queryById(id)); } + /** + * 获取上月费用详情 + * + * + */ + @GetMapping("/ultimoWater/{roomId}") + public R getUltimoWater(@NotNull(message = "房间id不能为空") + @PathVariable("roomId") Long roomId) { + return R.ok(costMeterWaterService.getUltimoWater(roomId)); + } /** * 新增费用-水电抄 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ServeceCustomerController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ServeceCustomerController.java new file mode 100644 index 00000000..65e0362a --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ServeceCustomerController.java @@ -0,0 +1,36 @@ +package org.dromara.property.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.domain.R; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.property.domain.bo.ServerBookingBo; +import org.dromara.property.domain.vo.ServeceCustomerCountVo; +import org.dromara.property.domain.vo.ServerBookingVo; +import org.dromara.property.service.IServiceWorkOrdersService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Author:yuyongle + * @Date:2025/7/21 15:25 + * @Description:客户服务控制器 + **/ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/serveceCustomer") +public class ServeceCustomerController { + private final IServiceWorkOrdersService serviceWorkOrdersService; + /** + * 查询客户服务工单看板统计 + */ + @GetMapping("/counts") + public R counts() { + return R.ok(serviceWorkOrdersService.counts()); + } + +} 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 7dc875ee..5fe92a6b 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 @@ -57,7 +57,7 @@ public class ServiceWorkOrders extends TenantEntity { /** * 发起人 */ - private long initiatorPeople; + private String initiatorPeople; /** diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CostReturnPayFeeBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CostReturnPayFeeBo.java index 9106436d..3e5b944d 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CostReturnPayFeeBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CostReturnPayFeeBo.java @@ -34,7 +34,14 @@ public class CostReturnPayFeeBo extends BaseEntity { */ @NotBlank(message = "退款单号不能为空", groups = { AddGroup.class, EditGroup.class }) private String returnNo; - + /** + * 收费id + */ + private Long chargeId; + /** + * 收费类型 + */ + private String chargeType; /** * 支付单号 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ServiceWorkOrdersBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ServiceWorkOrdersBo.java index 7e0dd8b9..dc33ecea 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ServiceWorkOrdersBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ServiceWorkOrdersBo.java @@ -36,11 +36,13 @@ public class ServiceWorkOrdersBo extends BaseEntity { /** * 工单名称 */ + @NotNull(message = "工单名称不能为空", groups = { EditGroup.class }) private String orderName; /** * 工单类型 */ + @NotNull(message = "工单类型不能为空", groups = { EditGroup.class }) private Long type; /** @@ -67,11 +69,14 @@ public class ServiceWorkOrdersBo extends BaseEntity { /** * 地址 */ + @NotNull(message = "地址不能为空", groups = { EditGroup.class }) + private String location; /** * 计划完成时间 */ + @NotNull(message = "计划完成时间不能为空", groups = { EditGroup.class }) private Date planCompleTime; /** diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServeceCustomerCountVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServeceCustomerCountVo.java new file mode 100644 index 00000000..60034545 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServeceCustomerCountVo.java @@ -0,0 +1,52 @@ +package org.dromara.property.domain.vo; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @Author:yuyongle + * @Date:2025/7/21 15:29 + * @Description:客户服务工单统计看板 + **/ +@Data +@Accessors(chain = true) +public class ServeceCustomerCountVo implements Serializable { + /** + * 工单总数 + */ + private Integer workOrdersTotal; + /** + * 未派工单总数 + */ + private Integer notWorkOrdersTotal; + /** + * 未半结超时工单 + */ + private Integer novertimeOrdersTotal; + /** + * 处理中工单 + */ + private Integer InHandOrdersTotal; + /** + * 当月工单超时率 + */ + private Integer novertimeOrdersRate; + /** + * 当月工单数 + */ + private Integer monthOrdersTotal; + /** + * 超时工单数 + */ + private Integer outTimeOrdersTotal; + /** + * 当月满意度 + */ + private Integer monthoSatisfaction; + /** + * 满意数 + */ + private Integer satisfaction; +} 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 3e2b2498..40eca36b 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 @@ -62,15 +62,9 @@ public class ServiceWorkOrdersInfoVo implements Serializable { private Date dispatchTime; /** - * 发起人姓名 + * 发起人 */ - @ExcelProperty(value = "发起人姓名") - private String initiatorName; - /** - * 发起人姓名文本 - */ - @ExcelProperty(value = "发起人姓名文本") - private String initiatorNameText; + private String initiatorPeople; /** * 发起人手机号 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersRecordInfoVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersRecordInfoVo.java index dbae9eac..2a3b1b79 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersRecordInfoVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersRecordInfoVo.java @@ -47,6 +47,10 @@ public class ServiceWorkOrdersRecordInfoVo implements Serializable { */ @ExcelProperty(value = "处理人") private String handlerName; + /** + * 发起人 + */ + private String initiatorPeople; /** * 创建时间 */ 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 17f30a4e..ac45e2f2 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 @@ -70,8 +70,7 @@ public class ServiceWorkOrdersVo implements Serializable { /** * 发起人 */ - private long initiatorPeople; - + private String initiatorPeople; /** * 处理人姓名 @@ -81,12 +80,6 @@ public class ServiceWorkOrdersVo implements Serializable { * 抄送人 */ private long ccPeople; - /** - * 发起人姓名文本 - */ - @ExcelProperty(value = "发起人姓名文本") - private String initiatorNameText; - /** * 发起人手机号 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ICostMeterWaterService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ICostMeterWaterService.java index e301107c..3370a0ce 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ICostMeterWaterService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ICostMeterWaterService.java @@ -66,4 +66,10 @@ public interface ICostMeterWaterService { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 获取上月水电详情 + * @return + */ + CostMeterWaterVo getUltimoWater(Long roomId); } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersService.java index 08d66aef..9906d476 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersService.java @@ -3,6 +3,7 @@ package org.dromara.property.service; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.property.domain.bo.ServiceWorkOrdersBo; +import org.dromara.property.domain.vo.ServeceCustomerCountVo; import org.dromara.property.domain.vo.ServiceWorkOrdersInfoVo; import org.dromara.property.domain.vo.ServiceWorkOrdersVo; @@ -66,4 +67,10 @@ public interface IServiceWorkOrdersService { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 工单服务看板 + * @return + */ + ServeceCustomerCountVo counts(); } 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 731f8e7a..b775aa92 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 @@ -119,6 +119,7 @@ public class CostCarChargeServiceImpl implements ICostCarChargeService { CostItemsVo costItemsVo = costItemsMapper.selectVoById(add.getCostItemsId()); BigDecimal unitPrice = costItemsVo.getUnitPrice(); add.setAmountReceivable(unitPrice); + add.setChargeStatus(ChargeStatusEnum.PAYMENT_IS_SUBJECT_TO_REVIEW.getValue()); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { 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 c8f8dcb1..777b0a06 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,5 +1,6 @@ package org.dromara.property.service.impl; +import cn.hutool.core.bean.BeanUtil; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -136,4 +137,18 @@ public class CostMeterWaterServiceImpl implements ICostMeterWaterService { } return baseMapper.deleteByIds(ids) > 0; } + + /** + * 获取上月水电详情 + * @return + */ + @Override + public CostMeterWaterVo getUltimoWater(Long roomId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(CostMeterWater::getRoomId, roomId); + wrapper.orderByDesc(CostMeterWater::getCreateTime); + wrapper.last("LIMIT 1"); + CostMeterWater latestRecord = baseMapper.selectOne(wrapper); + return BeanUtil.copyProperties(latestRecord,CostMeterWaterVo.class); + } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentPersonServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentPersonServiceImpl.java index c37d0989..7a4668e9 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentPersonServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentPersonServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.property.service.impl; +import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; @@ -115,15 +116,23 @@ public class ResidentPersonServiceImpl implements IResidentPersonService { @Override public Boolean updateByBo(ResidentPersonBo bo) { ResidentPerson update = MapstructUtils.convert(bo, ResidentPerson.class); - validEntityBeforeSave(update); + validEntityBeforeUpdate(update); return baseMapper.updateById(update) > 0; } + /** + * 保存前的数据校验 + */ + private void validEntityBeforeUpdate(ResidentPerson entity){ + //TODO 做一些数据校验,如唯一约束 + } /** * 保存前的数据校验 */ private void validEntityBeforeSave(ResidentPerson entity){ //TODO 做一些数据校验,如唯一约束 + boolean exists = baseMapper.exists(new LambdaQueryWrapper().eq(ResidentPerson::getUserId, entity.getUserId())); + Assert.isTrue(!exists,"该用户已入住!"); } /** 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 ca4cdcc5..de1569f5 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 @@ -4,7 +4,9 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; +import cn.idev.excel.event.Order; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; @@ -13,6 +15,7 @@ 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.satoken.utils.LoginHelper; import org.dromara.property.domain.ResidentPerson; import org.dromara.property.domain.ServiceWorkOrders; import org.dromara.property.domain.ServiceWorkOrdersRecord; @@ -24,6 +27,7 @@ import org.dromara.property.mapper.ServiceWorkOrdersMapper; import org.dromara.property.mapper.ServiceWorkOrdersRecordMapper; import org.dromara.property.mapper.ServiceWorkOrdersTypeMapper; import org.dromara.property.service.IServiceWorkOrdersService; +import org.dromara.system.api.model.LoginUser; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -56,34 +60,33 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { public ServiceWorkOrdersInfoVo queryById(Long id) { ServiceWorkOrdersVo serviceWorkOrdersVo = baseMapper.selectVoById(id); ServiceWorkOrdersInfoVo serviceWorkOrdersInfoVo = BeanUtil.copyProperties(serviceWorkOrdersVo, ServiceWorkOrdersInfoVo.class); + if(Objects.isNull(serviceWorkOrdersInfoVo)){ + return serviceWorkOrdersInfoVo; + } ServiceWorkOrdersTypeVo serviceWorkOrdersTypeVo = typesMapper.selectVoById(serviceWorkOrdersVo.getType()); if (Objects.nonNull(serviceWorkOrdersTypeVo)) { serviceWorkOrdersInfoVo.setTypeName(serviceWorkOrdersTypeVo.getOrderTypeName()); } - ResidentPersonVo residentPersonVo = residentPersonMapper.selectVoById(Long.valueOf(serviceWorkOrdersVo.getInitiatorPeople())); - if (Objects.nonNull(residentPersonVo)) { - serviceWorkOrdersInfoVo.setInitiatorNameText(residentPersonVo.getUserName()); - serviceWorkOrdersInfoVo.setInitiatorPhone(residentPersonVo.getPhone()); - } ResidentPersonVo residentPersonHandler = residentPersonMapper.selectVoById(Long.valueOf(serviceWorkOrdersVo.getHandler())); if (Objects.nonNull(residentPersonHandler)) { serviceWorkOrdersInfoVo.setHandlerText(residentPersonHandler.getUserName()); serviceWorkOrdersInfoVo.setHandlerPhone(residentPersonHandler.getPhone()); } //查询工单处理记录 - List serviceWorkOrdersRecordVoList = workOrdersRecordMapper.selectVoList(new LambdaQueryWrapper() - .eq(ServiceWorkOrdersRecord::getOrderId, id)); + List serviceWorkOrdersRecordVoList = workOrdersRecordMapper.selectVoList(new LambdaQueryWrapper().eq(ServiceWorkOrdersRecord::getOrderId, id)); if (CollUtil.isNotEmpty(serviceWorkOrdersRecordVoList)) { List serviceWorkOrdersRecordInfoVos = BeanUtil.copyToList(serviceWorkOrdersRecordVoList, ServiceWorkOrdersRecordInfoVo.class); - ListresidentPersonIdList = serviceWorkOrdersRecordInfoVos.stream() - .map(vo -> vo.getHandler()) - .distinct() - .collect(Collectors.toList()); + List residentPersonIdList = serviceWorkOrdersRecordInfoVos.stream().map(vo -> vo.getHandler()).distinct().collect(Collectors.toList()); List residentPeople = residentPersonMapper.selectByIds(residentPersonIdList); - serviceWorkOrdersRecordInfoVos.stream().forEach(workOrdersRecordVo->{ - ResidentPerson residentPerson = residentPeople.stream() - .filter(vo -> vo.getId() != null && vo.getId().equals(serviceWorkOrdersVo.getHandler())).findFirst().orElse(null); - workOrdersRecordVo.setHandlerName(residentPerson.getUserName()); + serviceWorkOrdersRecordInfoVos.stream().forEach(workOrdersRecordVo -> { + ResidentPerson residentPerson = residentPeople.stream().filter(vo -> vo.getId() != null && vo.getId().equals(serviceWorkOrdersVo.getHandler())).findFirst().orElse(null); + workOrdersRecordVo.setHandlerName(Objects.nonNull(residentPerson) ? residentPerson.getUserName() : null); + if (Objects.nonNull(serviceWorkOrdersTypeVo)) { + workOrdersRecordVo.setInitiatorPeople(serviceWorkOrdersVo.getInitiatorPeople()); + } + if(workOrdersRecordVo.getStatus().equals("1")||workOrdersRecordVo.getStatus().equals("2")){ + serviceWorkOrdersInfoVo.setDispatchTime(workOrdersRecordVo.getCreateTime()); + } }); serviceWorkOrdersInfoVo.setWorkOrdersRecordVoList(serviceWorkOrdersRecordInfoVos); } @@ -104,18 +107,14 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { if (ObjectUtil.isEmpty(result.getRecords())) { return TableDataInfo.build(result); } - List typeList = result.getRecords().stream() - .map(vo -> vo.getType()) - .distinct() - .collect(Collectors.toList()); + List typeList = result.getRecords().stream().map(vo -> vo.getType()).distinct().collect(Collectors.toList()); List serviceWorkOrdersTypeVoList = typesMapper.selectVoByIds(typeList); if (ObjectUtil.isEmpty(serviceWorkOrdersTypeVoList)) { return TableDataInfo.build(result); } List serviceWorkOrdersVoList = new ArrayList<>(); result.getRecords().stream().forEach(s -> { - ServiceWorkOrdersTypeVo serviceWorkOrdersTypeVo = serviceWorkOrdersTypeVoList.stream() - .filter(vo -> vo.getId() != null && vo.getId().equals(s.getType())).findFirst().orElse(null); + 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); serviceWorkOrdersVoList.add(s); @@ -163,8 +162,10 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(ServiceWorkOrdersBo bo) { ServiceWorkOrders add = MapstructUtils.convert(bo, ServiceWorkOrders.class); + LoginUser user = LoginHelper.getLoginUser(); add.setOrderNo("GD" + IdUtil.getSnowflakeNextIdStr()); add.setStatus("0"); + add.setInitiatorPeople(user.getNickname()); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { @@ -202,16 +203,19 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { } /** - * 保存前的数据校验 + * 修改前的数据校验 */ private void validEntityBeforeUpdate(ServiceWorkOrders entity) { - ServiceWorkOrders serviceWorkOrders = baseMapper.selectById(entity.getId()); + LambdaQueryWrapper ordersLambdaQueryWrapper = new LambdaQueryWrapper<>(); + ordersLambdaQueryWrapper.eq(ServiceWorkOrdersRecord::getOrderId, entity.getId()); + ordersLambdaQueryWrapper.eq(ServiceWorkOrdersRecord::getStatus, entity.getStatus()); + boolean exists = workOrdersRecordMapper.exists(ordersLambdaQueryWrapper); //TODO 做一些数据校验,如唯一约束 - if (!entity.getStatus().equals(serviceWorkOrders.getStatus())) { + if (!exists) { ServiceWorkOrdersRecord serviceWorkOrdersRecord = new ServiceWorkOrdersRecord(); - serviceWorkOrdersRecord.setOrderId(serviceWorkOrders.getId()); - serviceWorkOrdersRecord.setStatus(serviceWorkOrders.getStatus()); - serviceWorkOrdersRecord.setHandler(serviceWorkOrders.getHandler()); + serviceWorkOrdersRecord.setOrderId(entity.getId()); + serviceWorkOrdersRecord.setStatus(entity.getStatus()); + serviceWorkOrdersRecord.setHandler(entity.getHandler()); workOrdersRecordMapper.insert(serviceWorkOrdersRecord); } } @@ -231,4 +235,40 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { } return baseMapper.deleteByIds(ids) > 0; } + + /** + * 工单服务看板 + * @return + */ + @Override + public ServeceCustomerCountVo counts() { + List serviceWorkOrdersList = baseMapper.selectList(new QueryWrapper<>()); + // 总工单数 + int workOrdersTotal = serviceWorkOrdersList.size(); + + // 待派送工单 + int notWorkOrdersTotal = (int) serviceWorkOrdersList.stream().filter(order -> "0".equals(order.getStatus())).count(); + //未半结超时工单 + int novertimeOrdersTotal = (int) serviceWorkOrdersList.stream().filter(order -> !"4".equals(order.getStatus()) && "1".equals(order.getIsTimeOut())).count(); + // 处理中工单 + int inHandOrdersTotal = (int) serviceWorkOrdersList.stream().filter(order -> "3".equals(order.getStatus())).count(); + // 当月工单超时率 + int novertimeOrdersRate = (int) serviceWorkOrdersList.stream().filter(order -> "3".equals(order.getStatus())).count(); + // 当月工单数 + int monthOrdersTotal = (int) serviceWorkOrdersList.stream().filter(order -> "3".equals(order.getStatus())).count(); + // 超时工单数 + int outTimeOrdersTotal = (int) serviceWorkOrdersList.stream().filter(order -> "3".equals(order.getStatus())).count(); + // 当月满意度 + int monthoSatisfaction = (int) serviceWorkOrdersList.stream().filter(order -> "3".equals(order.getStatus())).count(); + // 满意数 + int satisfaction = (int) serviceWorkOrdersList.stream().filter(order -> "3".equals(order.getStatus())).count(); + + new ServeceCustomerCountVo() + .setWorkOrdersTotal(workOrdersTotal) + .setNotWorkOrdersTotal(notWorkOrdersTotal) + .setNovertimeOrdersTotal(novertimeOrdersTotal) + .setInHandOrdersTotal(inHandOrdersTotal); + + return null; + } }