feat(oa): 添加物流预览和快递问题以及报工相关功能

- 新增物流预览(OaExpress)相关实体、控制器、服务和映射
- 新增快递问题(OaExpressQuestion)相关实体、控制器、服务和映射
- 实现物流预览和快递问题的增删查改功能
- 添加物流预览的及时更新功能- 新增问题反馈(OaFeedback)和服务接口
- 新增项目报工(OaReport)和服务接口
- 添加百世快递路由查询工具类
This commit is contained in:
2025-08-08 16:19:11 +08:00
parent 5a60b73d72
commit 206f7d1061
43 changed files with 3836 additions and 4 deletions

View File

@@ -0,0 +1,86 @@
package com.gear.oa.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.gear.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* 物流预览对象 oa_express
*
* @author hdka
* @date 2025-07-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("oa_express")
public class OaExpress extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 主键id
*/
@TableId(value = "express_id")
private Long expressId;
/**
* 物流编号
*/
private String expressCode;
/**
* 数据状态0未确认1进行中2已完成
*/
private Long status;
/**
* 供应商姓名
*/
private String supplyName;
/**
* 供应商联系方式
*/
private String supplyPhone;
/**
* 负责人id
*/
private Long ownerId;
/**
* 负责人手机号(快递手机号)
*/
private String ownerPhone;
/**
* 计划到货时间
*/
private Date planDate;
/**
* 物流公司标识
*/
private String expressType;
/**
* 删除标志
*/
@TableLogic
private Long delFlag;
/**
* 备注
*/
private String remark;
/**
* 节点变化时间
*/
private Date lastUpdateTime;
/**
* 当前节点
*/
private String lastStatus;
}

View File

@@ -0,0 +1,60 @@
package com.gear.oa.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.gear.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* 快递问题对象 oa_express_question
*
* @author hdka
* @date 2025-07-21
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("oa_express_question")
public class OaExpressQuestion extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 主键id
*/
@TableId(value = "question_id")
private Long questionId;
/**
* 关联快递
*/
private Long expressId;
/**
* 问题描述
*/
private String description;
/**
* 汇报时间
*/
private Date reportTime;
/**
* 汇报人
*/
private String reportBy;
/**
* 0未解决1已解决
*/
private Long status;
/**
* 删除标志
*/
@TableLogic
private Long delFlag;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,48 @@
package com.gear.oa.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.gear.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 问题反馈对象 oa_feedback
*
* @author ruoyi
* @date 2025-03-28
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("oa_feedback")
public class OaFeedback extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 主键id
*/
@TableId(value = "feedback_id")
private Long feedbackId;
/**
* 反馈内容
*/
private String content;
/**
* 反馈状态
*/
private Long status;
/**
*
*/
private String remark;
/**
*
*/
@TableLogic
private Long delFlag;
private String title;
}

View File

@@ -0,0 +1,65 @@
package com.gear.oa.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.gear.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 项目报工对象 oa_project_report
*
* @author hdka
* @date 2025-06-16
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("oa_project_report")
public class OaReport extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 主键 ID
*/
@TableId(value = "report_id")
private Long reportId;
/**
* 经办人
*/
private Long userId;
/**
* 工作地点
*/
private String workPlace;
/**
* 项目 ID
*/
private Long projectId;
/**
* 报工内容
*/
private String content;
/**
* 删除标志 (0 正常, 1 删除)
*/
@TableLogic
private Integer delFlag;
/**
* 备注
*/
private String remark;
/**
* 是否出差
*/
private Long isTrip;
/**
* 报工时间
*/
private Long workType;
}

View File

@@ -0,0 +1,81 @@
package com.gear.oa.domain.bo;
import com.gear.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* 物流预览业务对象 oa_express
*
* @author hdka
* @date 2025-07-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class OaExpressBo extends BaseEntity {
/**
* 主键id
*/
private Long expressId;
/**
* 物流编号
*/
private String expressCode;
/**
* 数据状态0未确认1进行中2已完成
*/
private Long status;
/**
* 供应商姓名
*/
private String supplyName;
/**
* 供应商联系方式
*/
private String supplyPhone;
/**
* 负责人id
*/
private Long ownerId;
/**
* 负责人手机号(快递手机号)
*/
private String ownerPhone;
/**
* 计划到货时间
*/
private Date planDate;
/**
* 物流公司标识
*/
private String expressType;
/**
* 备注
*/
private String remark;
/**
* 节点变化时间
*/
private Date lastUpdateTime;
/**
* 当前节点
*/
private String lastStatus;
}

View File

@@ -0,0 +1,58 @@
package com.gear.oa.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.gear.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* 快递问题业务对象 oa_express_question
*
* @author hdka
* @date 2025-07-21
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class OaExpressQuestionBo extends BaseEntity {
/**
* 主键id
*/
private Long questionId;
/**
* 关联快递
*/
private Long expressId;
/**
* 问题描述
*/
private String description;
/**
* 汇报时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date reportTime;
/**
* 汇报人
*/
private String reportBy;
/**
* 0未解决1已解决
*/
private Long status;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,41 @@
package com.gear.oa.domain.bo;
import com.gear.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 问题反馈业务对象 oa_feedback
*
* @author ruoyi
* @date 2025-03-28
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class OaFeedbackBo extends BaseEntity {
/**
* 主键id
*/
private Long feedbackId;
/**
* 反馈内容
*/
private String content;
/**
* 反馈状态
*/
private Long status;
/**
*
*/
private String remark;
private Long state;
private String title;
}

View File

@@ -0,0 +1,91 @@
package com.gear.oa.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.gear.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import java.util.List;
/**
* 项目报工业务对象 oa_project_report
*
* @author hdka
* @date 2025-06-16
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class OaReportBo extends BaseEntity {
/**
* 主键 ID
*/
private Long reportId;
/**
* 经办人
*/
private Long userId;
/**
* 工作地点
*/
private String workPlace;
/**
* 报工内容
*/
private String content;
/**
* 备注
*/
private String remark;
/**
* 是否出差
*/
private Long isTrip;
/**
* 部门id
*/
private Long deptId;
/**
* 项目编号
*/
private String projectNum;
/**
* 项目代号
*/
private String projectCode;
/**
* 名字
*/
private String nickName;
/**
* 报工时间
*/
private Long workType;
/**
* 修改创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date time;
// 新增多用户ID和时间范围
private List<Long> userIds;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date startDate;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date endDate;
}

View File

@@ -0,0 +1,70 @@
package com.gear.oa.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.util.Date;
/**
* 快递问题视图对象 oa_express_question
*
* @author hdka
* @date 2025-07-21
*/
@Data
@ExcelIgnoreUnannotated
public class OaExpressQuestionVo {
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@ExcelProperty(value = "主键id")
private Long questionId;
/**
* 关联快递
*/
@ExcelProperty(value = "关联快递")
private Long expressId;
/**
* 问题描述
*/
@ExcelProperty(value = "问题描述")
private String description;
/**
* 汇报时间
*/
@ExcelProperty(value = "汇报时间")
private Date reportTime;
/**
* 汇报人
*/
@ExcelProperty(value = "汇报人")
private String reportBy;
/**
* 0未解决1已解决
*/
@ExcelProperty(value = "状态")
private Long status;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 快递单号
*/
private String expressCode;
}

View File

@@ -0,0 +1,116 @@
package com.gear.oa.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.gear.common.annotation.ExcelDictFormat;
import com.gear.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;
/**
* 物流预览视图对象 oa_express
*
* @author hdka
* @date 2025-07-20
*/
@Data
@ExcelIgnoreUnannotated
public class OaExpressVo {
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@ExcelProperty(value = "主键id")
private Long expressId;
/**
* 物流编号
*/
@ExcelProperty(value = "物流编号")
private String expressCode;
/**
* 数据状态0未确认1进行中2已完成
*/
@ExcelProperty(value = "数据状态0未确认1进行中2已完成")
private Long status;
/**
* 供应商姓名
*/
@ExcelProperty(value = "供应商姓名")
private String supplyName;
/**
* 供应商联系方式
*/
@ExcelProperty(value = "供应商联系方式")
private String supplyPhone;
/**
* 负责人id
*/
private Long ownerId;
/**
* 负责人id
*/
@ExcelProperty(value = "负责人")
private String ownerName;
/**
* 负责人手机号(快递手机号)
*/
@ExcelProperty(value = "负责人手机号", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "快=递手机号")
private String ownerPhone;
/**
* 计划到货时间
*/
@ExcelProperty(value = "计划到货时间")
private Date planDate;
/**
* 物流公司标识
*/
@ExcelProperty(value = "物流公司标识", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "oa_express_type")
private String expressType;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 接收时间
*/
private Date acceptTime;
/**
* 物流状态
*/
private String firstStatusName;
/**
* 节点变化时间
*/
private Date lastUpdateTime;
/**
* 当前节点
*/
private String lastStatus;
/**
* 更新时间
*/
private Date updateTime;
}

View File

@@ -0,0 +1,52 @@
package com.gear.oa.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
/**
* 问题反馈视图对象 oa_feedback
*
* @author ruoyi
* @date 2025-03-28
*/
@Data
@ExcelIgnoreUnannotated
public class OaFeedbackVo {
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@ExcelProperty(value = "主键id")
private Long feedbackId;
/**
* 反馈内容
*/
@ExcelProperty(value = "反馈内容")
private String content;
/**
* 反馈状态
*/
@ExcelProperty(value = "反馈状态")
private Long status;
/**
*
*/
@ExcelProperty(value = "")
private String remark;
/**
*
*/
@ExcelProperty(value = "")
private Long state;
private String title;
}

View File

@@ -0,0 +1,125 @@
package com.gear.oa.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* 项目报工视图对象 oa_project_report
*
* @author hdka
* @date 2025-06-16
*/
@Data
@ExcelIgnoreUnannotated
public class OaReportVo {
private static final long serialVersionUID = 1L;
/**
* 主键 ID
*/
@ExcelProperty(value = "主键 ID")
private Long reportId;
/**
* 经办人
*/
private Long userId;
/**
* 经办人姓名
*/
@ExcelProperty(value = "姓名")
private String nickName;
/**
* 部门名称
*/
private String deptName;
/**
* 工作地点
*/
@ExcelProperty(value = "工作地点")
private String workPlace;
/**
* 报工内容
*/
@ExcelProperty(value = "报工内容")
private String content;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 是否出差
*/
private Long isTrip;
/**
* 是否出差
*/
@ExcelProperty(value = "是否出差")
private String trip;
/**
* 报工次数
*/
private Long count;
/**
* 报工次数
*/
private Long reportCount;
/**
* 项目剩余时间
*/
private Long remainTime;
/**
* 项目状态
*/
private Long projectStatus;
/**
* 报工时间
*/
@ExcelProperty(value = "报工时间")
@DateTimeFormat("yyyy-MM-dd HH:mm:ss") // EasyExcel注解
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") // Jackson注解便于前后端一致
private Date createTime;
/**
* 国内外标志
*/
private Long workType;
/**
* 国内外
*/
@ExcelProperty(value = "国内/国外")
private String workTypeName;
/**
* inWorkNum
* 国内工作时间
*/
private Long inWorkNum;
/**
* inWorkNum
* 国外工作时间
*/
private Long outWorkNum;
}

View File

@@ -0,0 +1,44 @@
package com.gear.oa.domain.vo;
import lombok.Data;
@Data
public class ReportCardVo {
/**
* 今日报工
*/
private Long todayCount;
/**
* 昨日报工
*/
private Long todayCountChange;
/**
* 今日涉及项目数
*/
private Long inProgressProjects;
/**
* 昨日涉及项目数量
*/
private Long projectChange;
/**
* 涉及完成
*/
private Long completionRate;
/**
* 昨日涉及完成
*/
private Long completionChange;
/**
* 未完成(等待,未完成,待)
*/
private Long exceptions;
}

View File

@@ -0,0 +1,11 @@
package com.gear.oa.domain.vo;
import lombok.Data;
@Data
public class ReportPieVo {
private String projectName;
private Integer value;
}

View File

@@ -0,0 +1,14 @@
package com.gear.oa.domain.vo;
import lombok.Data;
import java.time.LocalDate;
@Data
public class ReportTrendVo {
private LocalDate date;
private Integer count;
}