Merge branch 'master' of http://47.109.37.87:3000/by2025/SmartParks
Some checks are pending
Gitea Actions Demo / Explore-Gitea-Actions (push) Waiting to run
Some checks are pending
Gitea Actions Demo / Explore-Gitea-Actions (push) Waiting to run
This commit is contained in:
1
pom.xml
1
pom.xml
@@ -99,6 +99,7 @@
|
|||||||
<nacos.password>nacos</nacos.password>
|
<nacos.password>nacos</nacos.password>
|
||||||
</properties>
|
</properties>
|
||||||
</profile>
|
</profile>
|
||||||
|
|
||||||
<profile>
|
<profile>
|
||||||
<id>prod</id>
|
<id>prod</id>
|
||||||
<properties>
|
<properties>
|
||||||
|
@@ -68,7 +68,17 @@ public class CostMeterWaterController extends BaseController {
|
|||||||
@PathVariable("id") Long id) {
|
@PathVariable("id") Long id) {
|
||||||
return R.ok(costMeterWaterService.queryById(id));
|
return R.ok(costMeterWaterService.queryById(id));
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 获取上月费用详情
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
@GetMapping("/ultimoWater/{roomId}")
|
||||||
|
public R<CostMeterWaterVo> getUltimoWater(@NotNull(message = "房间id不能为空")
|
||||||
|
@PathVariable("roomId") Long roomId) {
|
||||||
|
return R.ok(costMeterWaterService.getUltimoWater(roomId));
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 新增费用-水电抄
|
* 新增费用-水电抄
|
||||||
*/
|
*/
|
||||||
|
@@ -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<ServeceCustomerCountVo> counts() {
|
||||||
|
return R.ok(serviceWorkOrdersService.counts());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -41,12 +41,12 @@ public class AttendanceShift extends TenantEntity {
|
|||||||
/**
|
/**
|
||||||
* 考勤开始时间
|
* 考勤开始时间
|
||||||
*/
|
*/
|
||||||
private DateTime startTime;
|
private LocalTime startTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 考勤结束时间
|
* 考勤结束时间
|
||||||
*/
|
*/
|
||||||
private DateTime endTime;
|
private LocalTime endTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 状态(0:off,1:on)
|
* 状态(0:off,1:on)
|
||||||
@@ -61,12 +61,12 @@ public class AttendanceShift extends TenantEntity {
|
|||||||
/**
|
/**
|
||||||
* 休息开始时间
|
* 休息开始时间
|
||||||
*/
|
*/
|
||||||
private DateTime restStartTime;
|
private LocalTime restStartTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 休息结束时间
|
* 休息结束时间
|
||||||
*/
|
*/
|
||||||
private DateTime restEndTime;
|
private LocalTime restEndTime;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -47,7 +47,7 @@ public class ServiceWorkOrders extends TenantEntity {
|
|||||||
/**
|
/**
|
||||||
* 状态
|
* 状态
|
||||||
*/
|
*/
|
||||||
private Integer status;
|
private String status;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 派单时间
|
* 派单时间
|
||||||
@@ -55,15 +55,19 @@ public class ServiceWorkOrders extends TenantEntity {
|
|||||||
private Date dispatchTime;
|
private Date dispatchTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发起人姓名
|
* 发起人
|
||||||
*/
|
*/
|
||||||
private String initiatorName;
|
private String initiatorPeople;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理人姓名
|
* 处理人姓名
|
||||||
*/
|
*/
|
||||||
private String handler;
|
private long handler;
|
||||||
|
/**
|
||||||
|
* 抄送人
|
||||||
|
*/
|
||||||
|
private long ccPeople;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 地址
|
* 地址
|
||||||
@@ -88,17 +92,7 @@ public class ServiceWorkOrders extends TenantEntity {
|
|||||||
/**
|
/**
|
||||||
* 是否超时
|
* 是否超时
|
||||||
*/
|
*/
|
||||||
private Integer isTimeOut;
|
private String isTimeOut;
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建人id
|
|
||||||
*/
|
|
||||||
private Long createById;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新人id
|
|
||||||
*/
|
|
||||||
private Long updateById;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,45 @@
|
|||||||
|
package org.dromara.property.domain;
|
||||||
|
|
||||||
|
import org.dromara.common.tenant.core.TenantEntity;
|
||||||
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工单接单记录对象 service_work_orders_record
|
||||||
|
*
|
||||||
|
* @author mocheng
|
||||||
|
* @date 2025-07-21
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@TableName("service_work_orders_record")
|
||||||
|
public class ServiceWorkOrdersRecord extends TenantEntity {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* id
|
||||||
|
*/
|
||||||
|
@TableId(value = "id")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工单id
|
||||||
|
*/
|
||||||
|
private Long orderId;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态(0创建工单,1已派单2已抢单3处理中,4已完成)
|
||||||
|
*/
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理人
|
||||||
|
*/
|
||||||
|
private Long handler;
|
||||||
|
}
|
@@ -57,16 +57,6 @@ public class ServiceWorkOrdersType extends TenantEntity {
|
|||||||
*/
|
*/
|
||||||
private Integer isTransfers;
|
private Integer isTransfers;
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建人id
|
|
||||||
*/
|
|
||||||
private Long createById;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新人id
|
|
||||||
*/
|
|
||||||
private Long updateById;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 搜索值
|
* 搜索值
|
||||||
*/
|
*/
|
||||||
|
@@ -42,13 +42,13 @@ public class AttendanceShiftBo extends BaseEntity {
|
|||||||
* 考勤开始时间
|
* 考勤开始时间
|
||||||
*/
|
*/
|
||||||
@DateTimeFormat(pattern = "HH:mm:ss")
|
@DateTimeFormat(pattern = "HH:mm:ss")
|
||||||
private DateTime startTime;
|
private LocalTime startTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 考勤结束时间
|
* 考勤结束时间
|
||||||
*/
|
*/
|
||||||
@DateTimeFormat(pattern = "HH:mm:ss")
|
@DateTimeFormat(pattern = "HH:mm:ss")
|
||||||
private DateTime endTime;
|
private LocalTime endTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 状态(0:off,1:on)
|
* 状态(0:off,1:on)
|
||||||
@@ -64,13 +64,13 @@ public class AttendanceShiftBo extends BaseEntity {
|
|||||||
* 休息开始时间
|
* 休息开始时间
|
||||||
*/
|
*/
|
||||||
@DateTimeFormat(pattern = "HH:mm:ss")
|
@DateTimeFormat(pattern = "HH:mm:ss")
|
||||||
private DateTime restStartTime;
|
private LocalTime restStartTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 休息结束时间
|
* 休息结束时间
|
||||||
*/
|
*/
|
||||||
@DateTimeFormat(pattern = "HH:mm:ss")
|
@DateTimeFormat(pattern = "HH:mm:ss")
|
||||||
private DateTime restEndTime;
|
private LocalTime restEndTime;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -34,7 +34,14 @@ public class CostReturnPayFeeBo extends BaseEntity {
|
|||||||
*/
|
*/
|
||||||
@NotBlank(message = "退款单号不能为空", groups = { AddGroup.class, EditGroup.class })
|
@NotBlank(message = "退款单号不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||||
private String returnNo;
|
private String returnNo;
|
||||||
|
/**
|
||||||
|
* 收费id
|
||||||
|
*/
|
||||||
|
private Long chargeId;
|
||||||
|
/**
|
||||||
|
* 收费类型
|
||||||
|
*/
|
||||||
|
private String chargeType;
|
||||||
/**
|
/**
|
||||||
* 支付单号
|
* 支付单号
|
||||||
*/
|
*/
|
||||||
|
@@ -36,17 +36,19 @@ public class ServiceWorkOrdersBo extends BaseEntity {
|
|||||||
/**
|
/**
|
||||||
* 工单名称
|
* 工单名称
|
||||||
*/
|
*/
|
||||||
|
@NotNull(message = "工单名称不能为空", groups = { EditGroup.class })
|
||||||
private String orderName;
|
private String orderName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 工单类型
|
* 工单类型
|
||||||
*/
|
*/
|
||||||
|
@NotNull(message = "工单类型不能为空", groups = { EditGroup.class })
|
||||||
private Long type;
|
private Long type;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 状态
|
* 状态
|
||||||
*/
|
*/
|
||||||
private Integer status;
|
private String status;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 派单时间
|
* 派单时间
|
||||||
@@ -62,16 +64,19 @@ public class ServiceWorkOrdersBo extends BaseEntity {
|
|||||||
/**
|
/**
|
||||||
* 处理人姓名
|
* 处理人姓名
|
||||||
*/
|
*/
|
||||||
private String handler;
|
private Long handler;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 地址
|
* 地址
|
||||||
*/
|
*/
|
||||||
|
@NotNull(message = "地址不能为空", groups = { EditGroup.class })
|
||||||
|
|
||||||
private String location;
|
private String location;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 计划完成时间
|
* 计划完成时间
|
||||||
*/
|
*/
|
||||||
|
@NotNull(message = "计划完成时间不能为空", groups = { EditGroup.class })
|
||||||
private Date planCompleTime;
|
private Date planCompleTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -87,18 +92,6 @@ public class ServiceWorkOrdersBo extends BaseEntity {
|
|||||||
/**
|
/**
|
||||||
* 是否超时
|
* 是否超时
|
||||||
*/
|
*/
|
||||||
private Integer isTimeOut;
|
private String isTimeOut;
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建人id
|
|
||||||
*/
|
|
||||||
private Long createById;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新人id
|
|
||||||
*/
|
|
||||||
private Long updateById;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,53 @@
|
|||||||
|
package org.dromara.property.domain.bo;
|
||||||
|
|
||||||
|
import org.dromara.property.domain.ServiceWorkOrdersRecord;
|
||||||
|
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||||
|
import org.dromara.common.core.validate.AddGroup;
|
||||||
|
import org.dromara.common.core.validate.EditGroup;
|
||||||
|
import io.github.linpeilie.annotations.AutoMapper;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import jakarta.validation.constraints.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工单接单记录业务对象 service_work_orders_record
|
||||||
|
*
|
||||||
|
* @author mocheng
|
||||||
|
* @date 2025-07-21
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@AutoMapper(target = ServiceWorkOrdersRecord.class, reverseConvertGenerate = false)
|
||||||
|
public class ServiceWorkOrdersRecordBo extends BaseEntity {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* id
|
||||||
|
*/
|
||||||
|
@NotNull(message = "id不能为空", groups = { EditGroup.class })
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工单id
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "工单id不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||||
|
private long orderId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态(0创建工单,1已派单2已抢单3处理中,4已完成)
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "状态(0创建工单,1已派单2已抢单3处理中,4已完成)不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理人
|
||||||
|
*/
|
||||||
|
@NotNull(message = "处理人不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||||
|
private Long handler;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索值
|
||||||
|
*/
|
||||||
|
private String searchValue;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@@ -60,19 +60,4 @@ public class ServiceWorkOrdersTypeBo extends BaseEntity {
|
|||||||
*/
|
*/
|
||||||
private Integer isTransfers;
|
private Integer isTransfers;
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建人id
|
|
||||||
*/
|
|
||||||
private Long createById;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新人id
|
|
||||||
*/
|
|
||||||
private Long updateById;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 搜索值
|
|
||||||
*/
|
|
||||||
private String searchValue;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -49,13 +49,13 @@ public class AttendanceShiftVo implements Serializable {
|
|||||||
* 考勤开始时间
|
* 考勤开始时间
|
||||||
*/
|
*/
|
||||||
@ExcelProperty(value = "考勤开始时间")
|
@ExcelProperty(value = "考勤开始时间")
|
||||||
private DateTime startTime;
|
private LocalTime startTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 考勤结束时间
|
* 考勤结束时间
|
||||||
*/
|
*/
|
||||||
@ExcelProperty(value = "考勤结束时间")
|
@ExcelProperty(value = "考勤结束时间")
|
||||||
private DateTime endTime;
|
private LocalTime endTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 状态(0:off,1:on)
|
* 状态(0:off,1:on)
|
||||||
@@ -75,13 +75,13 @@ public class AttendanceShiftVo implements Serializable {
|
|||||||
* 休息开始时间
|
* 休息开始时间
|
||||||
*/
|
*/
|
||||||
@ExcelProperty(value = "休息开始时间")
|
@ExcelProperty(value = "休息开始时间")
|
||||||
private DateTime restStartTime;
|
private LocalTime restStartTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 休息结束时间
|
* 休息结束时间
|
||||||
*/
|
*/
|
||||||
@ExcelProperty(value = "休息结束时间")
|
@ExcelProperty(value = "休息结束时间")
|
||||||
private DateTime restEndTime;
|
private LocalTime restEndTime;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
|
}
|
@@ -5,10 +5,12 @@ import cn.idev.excel.annotation.ExcelProperty;
|
|||||||
import io.github.linpeilie.annotations.AutoMapper;
|
import io.github.linpeilie.annotations.AutoMapper;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.dromara.property.domain.ServiceWorkOrders;
|
import org.dromara.property.domain.ServiceWorkOrders;
|
||||||
|
import org.dromara.property.domain.ServiceWorkOrdersRecord;
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author:yuyongle
|
* @Author:yuyongle
|
||||||
@@ -51,7 +53,7 @@ public class ServiceWorkOrdersInfoVo implements Serializable {
|
|||||||
* 状态
|
* 状态
|
||||||
*/
|
*/
|
||||||
@ExcelProperty(value = "状态")
|
@ExcelProperty(value = "状态")
|
||||||
private Integer status;
|
private String status;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 派单时间
|
* 派单时间
|
||||||
@@ -60,15 +62,9 @@ public class ServiceWorkOrdersInfoVo implements Serializable {
|
|||||||
private Date dispatchTime;
|
private Date dispatchTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发起人姓名
|
* 发起人
|
||||||
*/
|
*/
|
||||||
@ExcelProperty(value = "发起人姓名")
|
private String initiatorPeople;
|
||||||
private String initiatorName;
|
|
||||||
/**
|
|
||||||
* 发起人姓名文本
|
|
||||||
*/
|
|
||||||
@ExcelProperty(value = "发起人姓名文本")
|
|
||||||
private String initiatorNameText;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发起人手机号
|
* 发起人手机号
|
||||||
@@ -80,7 +76,7 @@ public class ServiceWorkOrdersInfoVo implements Serializable {
|
|||||||
* 处理人姓名
|
* 处理人姓名
|
||||||
*/
|
*/
|
||||||
@ExcelProperty(value = "处理人姓名")
|
@ExcelProperty(value = "处理人姓名")
|
||||||
private String handler;
|
private Long handler;
|
||||||
/**
|
/**
|
||||||
* 处理人姓名文本
|
* 处理人姓名文本
|
||||||
*/
|
*/
|
||||||
@@ -120,7 +116,7 @@ public class ServiceWorkOrdersInfoVo implements Serializable {
|
|||||||
* 是否超时
|
* 是否超时
|
||||||
*/
|
*/
|
||||||
@ExcelProperty(value = "是否超时")
|
@ExcelProperty(value = "是否超时")
|
||||||
private Integer isTimeOut;
|
private String isTimeOut;
|
||||||
/**
|
/**
|
||||||
* 类型名称
|
* 类型名称
|
||||||
*/
|
*/
|
||||||
@@ -131,4 +127,10 @@ public class ServiceWorkOrdersInfoVo implements Serializable {
|
|||||||
*/
|
*/
|
||||||
@ExcelProperty(value = "创建时间")
|
@ExcelProperty(value = "创建时间")
|
||||||
private Date createTime;
|
private Date createTime;
|
||||||
|
/**
|
||||||
|
*工单记录
|
||||||
|
*/
|
||||||
|
private List<ServiceWorkOrdersRecordInfoVo> workOrdersRecordVoList;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,59 @@
|
|||||||
|
package org.dromara.property.domain.vo;
|
||||||
|
|
||||||
|
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
|
||||||
|
import cn.idev.excel.annotation.ExcelProperty;
|
||||||
|
import io.github.linpeilie.annotations.AutoMapper;
|
||||||
|
import lombok.Data;
|
||||||
|
import org.dromara.property.domain.ServiceWorkOrdersRecord;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工单接单记录视图对象 service_work_orders_record
|
||||||
|
*
|
||||||
|
* @author mocheng
|
||||||
|
* @date 2025-07-21
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ExcelIgnoreUnannotated
|
||||||
|
@AutoMapper(target = ServiceWorkOrdersRecord.class)
|
||||||
|
public class ServiceWorkOrdersRecordInfoVo implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* id
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "id")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态(0创建工单,1已派单2已抢单3处理中,4已完成)
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "状态(0创建工单,1已派单2已抢单3处理中,4已完成)")
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理人
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "处理人")
|
||||||
|
private Long handler;
|
||||||
|
/**
|
||||||
|
* 处理人
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "处理人")
|
||||||
|
private String handlerName;
|
||||||
|
/**
|
||||||
|
* 发起人
|
||||||
|
*/
|
||||||
|
private String initiatorPeople;
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "创建时间")
|
||||||
|
private Date createTime;
|
||||||
|
}
|
@@ -0,0 +1,62 @@
|
|||||||
|
package org.dromara.property.domain.vo;
|
||||||
|
|
||||||
|
import org.dromara.property.domain.ServiceWorkOrdersRecord;
|
||||||
|
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
|
||||||
|
import cn.idev.excel.annotation.ExcelProperty;
|
||||||
|
import org.dromara.common.excel.annotation.ExcelDictFormat;
|
||||||
|
import org.dromara.common.excel.convert.ExcelDictConvert;
|
||||||
|
import io.github.linpeilie.annotations.AutoMapper;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工单接单记录视图对象 service_work_orders_record
|
||||||
|
*
|
||||||
|
* @author mocheng
|
||||||
|
* @date 2025-07-21
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ExcelIgnoreUnannotated
|
||||||
|
@AutoMapper(target = ServiceWorkOrdersRecord.class)
|
||||||
|
public class ServiceWorkOrdersRecordVo implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* id
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "id")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工单id
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "工单id")
|
||||||
|
private String orderId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态(0创建工单,1已派单2已抢单3处理中,4已完成)
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "状态(0创建工单,1已派单2已抢单3处理中,4已完成)")
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理人
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "处理人")
|
||||||
|
private Long handler;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "创建时间")
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@@ -68,17 +68,6 @@ public class ServiceWorkOrdersTypeVo implements Serializable {
|
|||||||
@ExcelProperty(value = "是否支持转单(0支持,1不支持)")
|
@ExcelProperty(value = "是否支持转单(0支持,1不支持)")
|
||||||
private Integer isTransfers;
|
private Integer isTransfers;
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建人id
|
|
||||||
*/
|
|
||||||
@ExcelProperty(value = "创建人id")
|
|
||||||
private Long createById;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新人id
|
|
||||||
*/
|
|
||||||
@ExcelProperty(value = "更新人id")
|
|
||||||
private Long updateById;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 搜索值
|
* 搜索值
|
||||||
|
@@ -59,7 +59,7 @@ public class ServiceWorkOrdersVo implements Serializable {
|
|||||||
* 状态
|
* 状态
|
||||||
*/
|
*/
|
||||||
@ExcelProperty(value = "状态")
|
@ExcelProperty(value = "状态")
|
||||||
private int status;
|
private String status;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 派单时间
|
* 派单时间
|
||||||
@@ -68,27 +68,23 @@ public class ServiceWorkOrdersVo implements Serializable {
|
|||||||
private Date dispatchTime;
|
private Date dispatchTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发起人姓名
|
* 发起人
|
||||||
*/
|
*/
|
||||||
@ExcelProperty(value = "发起人姓名")
|
private String initiatorPeople;
|
||||||
private String initiatorName;
|
|
||||||
/**
|
|
||||||
* 发起人姓名文本
|
|
||||||
*/
|
|
||||||
@ExcelProperty(value = "发起人姓名文本")
|
|
||||||
private String initiatorNameText;
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理人姓名
|
||||||
|
*/
|
||||||
|
private long handler;
|
||||||
|
/**
|
||||||
|
* 抄送人
|
||||||
|
*/
|
||||||
|
private long ccPeople;
|
||||||
/**
|
/**
|
||||||
* 发起人手机号
|
* 发起人手机号
|
||||||
*/
|
*/
|
||||||
@ExcelProperty(value = "发起人手机号")
|
@ExcelProperty(value = "发起人手机号")
|
||||||
private String initiatorPhone;
|
private String initiatorPhone;
|
||||||
|
|
||||||
/**
|
|
||||||
* 处理人姓名
|
|
||||||
*/
|
|
||||||
@ExcelProperty(value = "处理人姓名")
|
|
||||||
private String handler;
|
|
||||||
/**
|
/**
|
||||||
* 处理人姓名文本
|
* 处理人姓名文本
|
||||||
*/
|
*/
|
||||||
@@ -124,19 +120,7 @@ public class ServiceWorkOrdersVo implements Serializable {
|
|||||||
* 是否超时
|
* 是否超时
|
||||||
*/
|
*/
|
||||||
@ExcelProperty(value = "是否超时")
|
@ExcelProperty(value = "是否超时")
|
||||||
private int isTimeOut;
|
private String isTimeOut;
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建人id
|
|
||||||
*/
|
|
||||||
@ExcelProperty(value = "创建人id")
|
|
||||||
private Long createById;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新人id
|
|
||||||
*/
|
|
||||||
@ExcelProperty(value = "更新人id")
|
|
||||||
private Long updateById;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 搜索值
|
* 搜索值
|
||||||
|
@@ -0,0 +1,17 @@
|
|||||||
|
package org.dromara.property.mapper;
|
||||||
|
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.dromara.property.domain.ServiceWorkOrdersRecord;
|
||||||
|
import org.dromara.property.domain.vo.ServiceWorkOrdersRecordVo;
|
||||||
|
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工单接单记录Mapper接口
|
||||||
|
*
|
||||||
|
* @author mocheng
|
||||||
|
* @date 2025-07-21
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface ServiceWorkOrdersRecordMapper extends BaseMapperPlus<ServiceWorkOrdersRecord, ServiceWorkOrdersRecordVo> {
|
||||||
|
|
||||||
|
}
|
@@ -66,4 +66,10 @@ public interface ICostMeterWaterService {
|
|||||||
* @return 是否删除成功
|
* @return 是否删除成功
|
||||||
*/
|
*/
|
||||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取上月水电详情
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
CostMeterWaterVo getUltimoWater(Long roomId);
|
||||||
}
|
}
|
||||||
|
@@ -3,6 +3,7 @@ package org.dromara.property.service;
|
|||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||||
import org.dromara.property.domain.bo.ServiceWorkOrdersBo;
|
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.ServiceWorkOrdersInfoVo;
|
||||||
import org.dromara.property.domain.vo.ServiceWorkOrdersVo;
|
import org.dromara.property.domain.vo.ServiceWorkOrdersVo;
|
||||||
|
|
||||||
@@ -66,4 +67,10 @@ public interface IServiceWorkOrdersService {
|
|||||||
* @return 是否删除成功
|
* @return 是否删除成功
|
||||||
*/
|
*/
|
||||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工单服务看板
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
ServeceCustomerCountVo counts();
|
||||||
}
|
}
|
||||||
|
@@ -119,6 +119,7 @@ public class CostCarChargeServiceImpl implements ICostCarChargeService {
|
|||||||
CostItemsVo costItemsVo = costItemsMapper.selectVoById(add.getCostItemsId());
|
CostItemsVo costItemsVo = costItemsMapper.selectVoById(add.getCostItemsId());
|
||||||
BigDecimal unitPrice = costItemsVo.getUnitPrice();
|
BigDecimal unitPrice = costItemsVo.getUnitPrice();
|
||||||
add.setAmountReceivable(unitPrice);
|
add.setAmountReceivable(unitPrice);
|
||||||
|
add.setChargeStatus(ChargeStatusEnum.PAYMENT_IS_SUBJECT_TO_REVIEW.getValue());
|
||||||
validEntityBeforeSave(add);
|
validEntityBeforeSave(add);
|
||||||
boolean flag = baseMapper.insert(add) > 0;
|
boolean flag = baseMapper.insert(add) > 0;
|
||||||
if (flag) {
|
if (flag) {
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
package org.dromara.property.service.impl;
|
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.MapstructUtils;
|
||||||
import org.dromara.common.core.utils.StringUtils;
|
import org.dromara.common.core.utils.StringUtils;
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
@@ -136,4 +137,18 @@ public class CostMeterWaterServiceImpl implements ICostMeterWaterService {
|
|||||||
}
|
}
|
||||||
return baseMapper.deleteByIds(ids) > 0;
|
return baseMapper.deleteByIds(ids) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取上月水电详情
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public CostMeterWaterVo getUltimoWater(Long roomId) {
|
||||||
|
LambdaQueryWrapper<CostMeterWater> 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
package org.dromara.property.service.impl;
|
package org.dromara.property.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.lang.Assert;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import org.dromara.common.core.utils.MapstructUtils;
|
import org.dromara.common.core.utils.MapstructUtils;
|
||||||
import org.dromara.common.core.utils.StringUtils;
|
import org.dromara.common.core.utils.StringUtils;
|
||||||
@@ -115,15 +116,23 @@ public class ResidentPersonServiceImpl implements IResidentPersonService {
|
|||||||
@Override
|
@Override
|
||||||
public Boolean updateByBo(ResidentPersonBo bo) {
|
public Boolean updateByBo(ResidentPersonBo bo) {
|
||||||
ResidentPerson update = MapstructUtils.convert(bo, ResidentPerson.class);
|
ResidentPerson update = MapstructUtils.convert(bo, ResidentPerson.class);
|
||||||
validEntityBeforeSave(update);
|
validEntityBeforeUpdate(update);
|
||||||
return baseMapper.updateById(update) > 0;
|
return baseMapper.updateById(update) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存前的数据校验
|
||||||
|
*/
|
||||||
|
private void validEntityBeforeUpdate(ResidentPerson entity){
|
||||||
|
//TODO 做一些数据校验,如唯一约束
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 保存前的数据校验
|
* 保存前的数据校验
|
||||||
*/
|
*/
|
||||||
private void validEntityBeforeSave(ResidentPerson entity){
|
private void validEntityBeforeSave(ResidentPerson entity){
|
||||||
//TODO 做一些数据校验,如唯一约束
|
//TODO 做一些数据校验,如唯一约束
|
||||||
|
boolean exists = baseMapper.exists(new LambdaQueryWrapper<ResidentPerson>().eq(ResidentPerson::getUserId, entity.getUserId()));
|
||||||
|
Assert.isTrue(!exists,"该用户已入住!");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -1,9 +1,12 @@
|
|||||||
package org.dromara.property.service.impl;
|
package org.dromara.property.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
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.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@@ -12,14 +15,19 @@ import org.dromara.common.core.utils.MapstructUtils;
|
|||||||
import org.dromara.common.core.utils.StringUtils;
|
import org.dromara.common.core.utils.StringUtils;
|
||||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
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.ServiceWorkOrders;
|
||||||
|
import org.dromara.property.domain.ServiceWorkOrdersRecord;
|
||||||
import org.dromara.property.domain.ServiceWorkOrdersType;
|
import org.dromara.property.domain.ServiceWorkOrdersType;
|
||||||
import org.dromara.property.domain.bo.ServiceWorkOrdersBo;
|
import org.dromara.property.domain.bo.ServiceWorkOrdersBo;
|
||||||
import org.dromara.property.domain.vo.*;
|
import org.dromara.property.domain.vo.*;
|
||||||
import org.dromara.property.mapper.ResidentPersonMapper;
|
import org.dromara.property.mapper.ResidentPersonMapper;
|
||||||
import org.dromara.property.mapper.ServiceWorkOrdersMapper;
|
import org.dromara.property.mapper.ServiceWorkOrdersMapper;
|
||||||
|
import org.dromara.property.mapper.ServiceWorkOrdersRecordMapper;
|
||||||
import org.dromara.property.mapper.ServiceWorkOrdersTypeMapper;
|
import org.dromara.property.mapper.ServiceWorkOrdersTypeMapper;
|
||||||
import org.dromara.property.service.IServiceWorkOrdersService;
|
import org.dromara.property.service.IServiceWorkOrdersService;
|
||||||
|
import org.dromara.system.api.model.LoginUser;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
@@ -40,6 +48,7 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService {
|
|||||||
private final ServiceWorkOrdersMapper baseMapper;
|
private final ServiceWorkOrdersMapper baseMapper;
|
||||||
private final ServiceWorkOrdersTypeMapper typesMapper;
|
private final ServiceWorkOrdersTypeMapper typesMapper;
|
||||||
private final ResidentPersonMapper residentPersonMapper;
|
private final ResidentPersonMapper residentPersonMapper;
|
||||||
|
private final ServiceWorkOrdersRecordMapper workOrdersRecordMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询【工单处理】
|
* 查询【工单处理】
|
||||||
@@ -51,20 +60,36 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService {
|
|||||||
public ServiceWorkOrdersInfoVo queryById(Long id) {
|
public ServiceWorkOrdersInfoVo queryById(Long id) {
|
||||||
ServiceWorkOrdersVo serviceWorkOrdersVo = baseMapper.selectVoById(id);
|
ServiceWorkOrdersVo serviceWorkOrdersVo = baseMapper.selectVoById(id);
|
||||||
ServiceWorkOrdersInfoVo serviceWorkOrdersInfoVo = BeanUtil.copyProperties(serviceWorkOrdersVo, ServiceWorkOrdersInfoVo.class);
|
ServiceWorkOrdersInfoVo serviceWorkOrdersInfoVo = BeanUtil.copyProperties(serviceWorkOrdersVo, ServiceWorkOrdersInfoVo.class);
|
||||||
|
if(Objects.isNull(serviceWorkOrdersInfoVo)){
|
||||||
|
return serviceWorkOrdersInfoVo;
|
||||||
|
}
|
||||||
ServiceWorkOrdersTypeVo serviceWorkOrdersTypeVo = typesMapper.selectVoById(serviceWorkOrdersVo.getType());
|
ServiceWorkOrdersTypeVo serviceWorkOrdersTypeVo = typesMapper.selectVoById(serviceWorkOrdersVo.getType());
|
||||||
if (Objects.nonNull(serviceWorkOrdersTypeVo)) {
|
if (Objects.nonNull(serviceWorkOrdersTypeVo)) {
|
||||||
serviceWorkOrdersInfoVo.setTypeName(serviceWorkOrdersTypeVo.getOrderTypeName());
|
serviceWorkOrdersInfoVo.setTypeName(serviceWorkOrdersTypeVo.getOrderTypeName());
|
||||||
}
|
}
|
||||||
ResidentPersonVo residentPersonVo = residentPersonMapper.selectVoById(Long.valueOf(serviceWorkOrdersVo.getInitiatorName()));
|
|
||||||
if (Objects.nonNull(residentPersonVo)) {
|
|
||||||
serviceWorkOrdersInfoVo.setInitiatorNameText(residentPersonVo.getUserName());
|
|
||||||
serviceWorkOrdersInfoVo.setInitiatorPhone(residentPersonVo.getPhone());
|
|
||||||
}
|
|
||||||
ResidentPersonVo residentPersonHandler = residentPersonMapper.selectVoById(Long.valueOf(serviceWorkOrdersVo.getHandler()));
|
ResidentPersonVo residentPersonHandler = residentPersonMapper.selectVoById(Long.valueOf(serviceWorkOrdersVo.getHandler()));
|
||||||
if (Objects.nonNull(residentPersonHandler)) {
|
if (Objects.nonNull(residentPersonHandler)) {
|
||||||
serviceWorkOrdersInfoVo.setHandlerText(residentPersonHandler.getUserName());
|
serviceWorkOrdersInfoVo.setHandlerText(residentPersonHandler.getUserName());
|
||||||
serviceWorkOrdersInfoVo.setHandlerPhone(residentPersonHandler.getPhone());
|
serviceWorkOrdersInfoVo.setHandlerPhone(residentPersonHandler.getPhone());
|
||||||
}
|
}
|
||||||
|
//查询工单处理记录
|
||||||
|
List<ServiceWorkOrdersRecordVo> serviceWorkOrdersRecordVoList = workOrdersRecordMapper.selectVoList(new LambdaQueryWrapper<ServiceWorkOrdersRecord>().eq(ServiceWorkOrdersRecord::getOrderId, id));
|
||||||
|
if (CollUtil.isNotEmpty(serviceWorkOrdersRecordVoList)) {
|
||||||
|
List<ServiceWorkOrdersRecordInfoVo> serviceWorkOrdersRecordInfoVos = BeanUtil.copyToList(serviceWorkOrdersRecordVoList, ServiceWorkOrdersRecordInfoVo.class);
|
||||||
|
List<Long> residentPersonIdList = serviceWorkOrdersRecordInfoVos.stream().map(vo -> vo.getHandler()).distinct().collect(Collectors.toList());
|
||||||
|
List<ResidentPerson> 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(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);
|
||||||
|
}
|
||||||
return serviceWorkOrdersInfoVo;
|
return serviceWorkOrdersInfoVo;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,16 +107,16 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService {
|
|||||||
if (ObjectUtil.isEmpty(result.getRecords())) {
|
if (ObjectUtil.isEmpty(result.getRecords())) {
|
||||||
return TableDataInfo.build(result);
|
return TableDataInfo.build(result);
|
||||||
}
|
}
|
||||||
List<Long> typeList = result.getRecords().stream()
|
List<Long> typeList = result.getRecords().stream().map(vo -> vo.getType()).distinct().collect(Collectors.toList());
|
||||||
.map(vo -> vo.getType())
|
|
||||||
.distinct()
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
List<ServiceWorkOrdersTypeVo> serviceWorkOrdersTypeVoList = typesMapper.selectVoByIds(typeList);
|
List<ServiceWorkOrdersTypeVo> serviceWorkOrdersTypeVoList = typesMapper.selectVoByIds(typeList);
|
||||||
|
if (ObjectUtil.isEmpty(serviceWorkOrdersTypeVoList)) {
|
||||||
|
return TableDataInfo.build(result);
|
||||||
|
}
|
||||||
List<ServiceWorkOrdersVo> serviceWorkOrdersVoList = new ArrayList<>();
|
List<ServiceWorkOrdersVo> serviceWorkOrdersVoList = new ArrayList<>();
|
||||||
result.getRecords().stream().forEach(s -> {
|
result.getRecords().stream().forEach(s -> {
|
||||||
ServiceWorkOrdersTypeVo serviceWorkOrdersTypeVo = serviceWorkOrdersTypeVoList.stream()
|
ServiceWorkOrdersTypeVo serviceWorkOrdersTypeVo = serviceWorkOrdersTypeVoList.stream().filter(vo -> vo.getId() != null && vo.getId().equals(s.getType())).findFirst().orElse(null);
|
||||||
.filter(vo -> vo.getId() != null && vo.getId().equals(s.getType())).findFirst().orElse(null);
|
|
||||||
s.setTypeName(serviceWorkOrdersTypeVo.getOrderTypeName());
|
s.setTypeName(ObjectUtil.isNotNull(serviceWorkOrdersTypeVo) ? serviceWorkOrdersTypeVo.getOrderTypeName() : null);
|
||||||
serviceWorkOrdersVoList.add(s);
|
serviceWorkOrdersVoList.add(s);
|
||||||
});
|
});
|
||||||
return TableDataInfo.build(new Page<ServiceWorkOrdersVo>().setRecords(serviceWorkOrdersVoList));
|
return TableDataInfo.build(new Page<ServiceWorkOrdersVo>().setRecords(serviceWorkOrdersVoList));
|
||||||
@@ -116,8 +141,8 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService {
|
|||||||
lqw.eq(StringUtils.isNotBlank(bo.getOrderNo()), ServiceWorkOrders::getOrderNo, bo.getOrderNo());
|
lqw.eq(StringUtils.isNotBlank(bo.getOrderNo()), ServiceWorkOrders::getOrderNo, bo.getOrderNo());
|
||||||
lqw.like(StringUtils.isNotBlank(bo.getOrderName()), ServiceWorkOrders::getOrderName, bo.getOrderName());
|
lqw.like(StringUtils.isNotBlank(bo.getOrderName()), ServiceWorkOrders::getOrderName, bo.getOrderName());
|
||||||
lqw.eq(bo.getDispatchTime() != null, ServiceWorkOrders::getDispatchTime, bo.getDispatchTime());
|
lqw.eq(bo.getDispatchTime() != null, ServiceWorkOrders::getDispatchTime, bo.getDispatchTime());
|
||||||
lqw.like(StringUtils.isNotBlank(bo.getInitiatorName()), ServiceWorkOrders::getInitiatorName, bo.getInitiatorName());
|
lqw.like(StringUtils.isNotBlank(bo.getInitiatorName()), ServiceWorkOrders::getInitiatorPeople, bo.getInitiatorName());
|
||||||
lqw.eq(StringUtils.isNotBlank(bo.getHandler()), ServiceWorkOrders::getHandler, bo.getHandler());
|
lqw.eq(ObjectUtil.isNotEmpty(bo.getHandler()), ServiceWorkOrders::getHandler, bo.getHandler());
|
||||||
lqw.eq(StringUtils.isNotBlank(bo.getLocation()), ServiceWorkOrders::getLocation, bo.getLocation());
|
lqw.eq(StringUtils.isNotBlank(bo.getLocation()), ServiceWorkOrders::getLocation, bo.getLocation());
|
||||||
lqw.eq(bo.getPlanCompleTime() != null, ServiceWorkOrders::getPlanCompleTime, bo.getPlanCompleTime());
|
lqw.eq(bo.getPlanCompleTime() != null, ServiceWorkOrders::getPlanCompleTime, bo.getPlanCompleTime());
|
||||||
lqw.eq(bo.getCompleTime() != null, ServiceWorkOrders::getCompleTime, bo.getCompleTime());
|
lqw.eq(bo.getCompleTime() != null, ServiceWorkOrders::getCompleTime, bo.getCompleTime());
|
||||||
@@ -137,11 +162,19 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService {
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Boolean insertByBo(ServiceWorkOrdersBo bo) {
|
public Boolean insertByBo(ServiceWorkOrdersBo bo) {
|
||||||
ServiceWorkOrders add = MapstructUtils.convert(bo, ServiceWorkOrders.class);
|
ServiceWorkOrders add = MapstructUtils.convert(bo, ServiceWorkOrders.class);
|
||||||
|
LoginUser user = LoginHelper.getLoginUser();
|
||||||
add.setOrderNo("GD" + IdUtil.getSnowflakeNextIdStr());
|
add.setOrderNo("GD" + IdUtil.getSnowflakeNextIdStr());
|
||||||
|
add.setStatus("0");
|
||||||
|
add.setInitiatorPeople(user.getNickname());
|
||||||
validEntityBeforeSave(add);
|
validEntityBeforeSave(add);
|
||||||
boolean flag = baseMapper.insert(add) > 0;
|
boolean flag = baseMapper.insert(add) > 0;
|
||||||
if (flag) {
|
if (flag) {
|
||||||
bo.setId(add.getId());
|
bo.setId(add.getId());
|
||||||
|
ServiceWorkOrdersRecord serviceWorkOrdersRecord = new ServiceWorkOrdersRecord();
|
||||||
|
serviceWorkOrdersRecord.setOrderId(add.getId());
|
||||||
|
serviceWorkOrdersRecord.setStatus(add.getStatus());
|
||||||
|
serviceWorkOrdersRecord.setHandler(add.getHandler());
|
||||||
|
workOrdersRecordMapper.insert(serviceWorkOrdersRecord);
|
||||||
}
|
}
|
||||||
return flag;
|
return flag;
|
||||||
}
|
}
|
||||||
@@ -156,7 +189,7 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService {
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Boolean updateByBo(ServiceWorkOrdersBo bo) {
|
public Boolean updateByBo(ServiceWorkOrdersBo bo) {
|
||||||
ServiceWorkOrders update = MapstructUtils.convert(bo, ServiceWorkOrders.class);
|
ServiceWorkOrders update = MapstructUtils.convert(bo, ServiceWorkOrders.class);
|
||||||
validEntityBeforeSave(update);
|
validEntityBeforeUpdate(update);
|
||||||
return baseMapper.updateById(update) > 0;
|
return baseMapper.updateById(update) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -166,6 +199,25 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService {
|
|||||||
private void validEntityBeforeSave(ServiceWorkOrders entity) {
|
private void validEntityBeforeSave(ServiceWorkOrders entity) {
|
||||||
//TODO 做一些数据校验,如唯一约束
|
//TODO 做一些数据校验,如唯一约束
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改前的数据校验
|
||||||
|
*/
|
||||||
|
private void validEntityBeforeUpdate(ServiceWorkOrders entity) {
|
||||||
|
LambdaQueryWrapper<ServiceWorkOrdersRecord> ordersLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
ordersLambdaQueryWrapper.eq(ServiceWorkOrdersRecord::getOrderId, entity.getId());
|
||||||
|
ordersLambdaQueryWrapper.eq(ServiceWorkOrdersRecord::getStatus, entity.getStatus());
|
||||||
|
boolean exists = workOrdersRecordMapper.exists(ordersLambdaQueryWrapper);
|
||||||
|
//TODO 做一些数据校验,如唯一约束
|
||||||
|
if (!exists) {
|
||||||
|
ServiceWorkOrdersRecord serviceWorkOrdersRecord = new ServiceWorkOrdersRecord();
|
||||||
|
serviceWorkOrdersRecord.setOrderId(entity.getId());
|
||||||
|
serviceWorkOrdersRecord.setStatus(entity.getStatus());
|
||||||
|
serviceWorkOrdersRecord.setHandler(entity.getHandler());
|
||||||
|
workOrdersRecordMapper.insert(serviceWorkOrdersRecord);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -183,4 +235,40 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService {
|
|||||||
}
|
}
|
||||||
return baseMapper.deleteByIds(ids) > 0;
|
return baseMapper.deleteByIds(ids) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工单服务看板
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public ServeceCustomerCountVo counts() {
|
||||||
|
List<ServiceWorkOrders> 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper
|
||||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="org.dromara.property.mapper.ServiceWorkOrdersRecordMapper">
|
||||||
|
|
||||||
|
</mapper>
|
Reference in New Issue
Block a user