提交 c5315cc2 作者: Administrator

feat:访客,车辆来访标签卡收发功能

上级 08daed85
...@@ -12,7 +12,9 @@ import lombok.*; ...@@ -12,7 +12,9 @@ import lombok.*;
import lombok.experimental.FieldDefaults; import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants; import lombok.experimental.FieldNameConstants;
import org.hibernate.annotations.Comment; import org.hibernate.annotations.Comment;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.UpdateTimestamp;
import org.hibernate.snowflake.SnowflakeId; import org.hibernate.snowflake.SnowflakeId;
/** /**
...@@ -60,8 +62,10 @@ public class Icon implements Serializable { ...@@ -60,8 +62,10 @@ public class Icon implements Serializable {
String iconOffline; String iconOffline;
@Comment("创建时间") @Comment("创建时间")
@CreationTimestamp
LocalDateTime createTime; LocalDateTime createTime;
@Comment("修改时间") @Comment("修改时间")
@UpdateTimestamp
LocalDateTime updateTime; LocalDateTime updateTime;
} }
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.location; package com.yiring.app.domain.location;
import com.yiring.app.domain.visitor.Car;
import com.yiring.auth.domain.user.User; import com.yiring.auth.domain.user.User;
import com.yiring.common.annotation.FieldMapping; import com.yiring.common.annotation.FieldMapping;
import com.yiring.common.domain.BasicEntity; import com.yiring.common.domain.BasicEntity;
...@@ -86,6 +87,10 @@ public class LocationTag extends BasicEntity implements Serializable { ...@@ -86,6 +87,10 @@ public class LocationTag extends BasicEntity implements Serializable {
@Comment("绑定用户") @Comment("绑定用户")
User user; User user;
@OneToOne
@Comment("绑定车辆")
Car car;
@FieldMapping @FieldMapping
@Comment("使用/闲置") @Comment("使用/闲置")
Boolean used; Boolean used;
......
...@@ -14,4 +14,6 @@ import org.springframework.stereotype.Repository; ...@@ -14,4 +14,6 @@ import org.springframework.stereotype.Repository;
@Repository @Repository
public interface LocationTagRepository public interface LocationTagRepository
extends JpaRepository<LocationTag, Serializable>, JpaSpecificationExecutor<LocationTag> {} extends JpaRepository<LocationTag, Serializable>, JpaSpecificationExecutor<LocationTag> {
LocationTag findByCode(String code);
}
...@@ -5,10 +5,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; ...@@ -5,10 +5,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import javax.persistence.Entity; import javax.persistence.*;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.*; import lombok.*;
import lombok.experimental.FieldDefaults; import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants; import lombok.experimental.FieldNameConstants;
...@@ -61,4 +58,22 @@ public class Car implements Serializable { ...@@ -61,4 +58,22 @@ public class Car implements Serializable {
@Comment("标签卡") @Comment("标签卡")
String labelCard; String labelCard;
@Comment("司机名称")
String driverName;
@Comment("司机电话")
String mobile;
@Comment("所属公司")
String orgId;
@Comment("被访人电话")
String intervieweeMobile;
@Comment("被访人姓名")
String intervieweeName;
@Comment("来访原因/邀请原因")
String reason;
} }
...@@ -21,4 +21,6 @@ public interface CarRepository extends JpaRepository<Car, Serializable>, JpaSpec ...@@ -21,4 +21,6 @@ public interface CarRepository extends JpaRepository<Car, Serializable>, JpaSpec
*/ */
@Query("SELECT COUNT(c.id) FROM Car c where carNum=?1 and cardRecTime is null") @Query("SELECT COUNT(c.id) FROM Car c where carNum=?1 and cardRecTime is null")
int hasCarInfoByCarNum(String param); int hasCarInfoByCarNum(String param);
Car findByLabelCard(String str);
} }
...@@ -2,12 +2,10 @@ ...@@ -2,12 +2,10 @@
package com.yiring.app.domain.visitor; package com.yiring.app.domain.visitor;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.yiring.auth.domain.user.User;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import javax.persistence.*; import javax.persistence.*;
import javax.persistence.CascadeType;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.Table; import javax.persistence.Table;
import lombok.*; import lombok.*;
...@@ -71,9 +69,6 @@ public class Visitor implements Serializable { ...@@ -71,9 +69,6 @@ public class Visitor implements Serializable {
@Comment("所属单位id") @Comment("所属单位id")
String orgId; String orgId;
// @Comment("被访人id")
// Long intervieweeId;
@Comment("来访原因/邀请原因") @Comment("来访原因/邀请原因")
String reason; String reason;
...@@ -81,10 +76,6 @@ public class Visitor implements Serializable { ...@@ -81,10 +76,6 @@ public class Visitor implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
LocalDateTime cardRecTime; LocalDateTime cardRecTime;
@Comment("预约到访时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
LocalDateTime appOfVisitTime;
@Comment("创建时间") @Comment("创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
LocalDateTime createTime; LocalDateTime createTime;
...@@ -93,33 +84,20 @@ public class Visitor implements Serializable { ...@@ -93,33 +84,20 @@ public class Visitor implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
LocalDateTime cardSendTime; LocalDateTime cardSendTime;
@Comment("备用字段")
Long reserve1;
@Comment("是否已删除:Y是 N否") @Comment("是否已删除:Y是 N否")
@Column(columnDefinition = "VARCHAR DEFAULT 'N'") @Column(columnDefinition = "VARCHAR DEFAULT 'N'")
String deleted; String deleted;
@Comment("主访人员id") @Comment("被访人电话")
Long mainVisitorId; String intervieweeMobile;
@Comment("被访人姓名")
String intervieweeName;
@Comment("备用字段") @Comment("备用字段")
String reserve3; String reserve3;
@Comment("访客车辆")
@OneToOne(cascade = { CascadeType.ALL })
Car car;
@Comment("被访人信息")
@OneToOne
@JoinColumn(name = "interviewee_id", referencedColumnName = "id")
User user;
@Comment("修改时间") @Comment("修改时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
LocalDateTime updateTime; LocalDateTime updateTime;
// @Comment("邀请人")
// @OneToOne(cascade = { CascadeType.ALL })
// @JoinColumn(name = "main_visitor_id", referencedColumnName = "id")
// Visitor visitor;
} }
...@@ -2,9 +2,6 @@ ...@@ -2,9 +2,6 @@
package com.yiring.app.domain.visitor; package com.yiring.app.domain.visitor;
import java.io.Serializable; import java.io.Serializable;
import java.util.List;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -17,9 +14,10 @@ import org.springframework.stereotype.Repository; ...@@ -17,9 +14,10 @@ import org.springframework.stereotype.Repository;
public interface VisitorRepository extends JpaRepository<Visitor, Serializable>, JpaSpecificationExecutor<Visitor> { public interface VisitorRepository extends JpaRepository<Visitor, Serializable>, JpaSpecificationExecutor<Visitor> {
Visitor findByIdAndDeleted(Long id, String deleted); Visitor findByIdAndDeleted(Long id, String deleted);
List<Visitor> findAllByMainVisitorIdAndDeletedEquals(Long mainId, String deleted); Visitor findByLabelCardAndDeleted(String card, String deleted);
// List<Visitor> findAllByMainVisitorIdAndDeletedEquals(Long mainId, String deleted);
List<Visitor> findAllByMainVisitorIdAndDeletedEqualsAndIdIsNot(Long mainId, String deleted, Long id); // List<Visitor> findAllByMainVisitorIdAndDeletedEqualsAndIdIsNot(Long mainId, String deleted, Long id);
Page<Visitor> findAllByVisitorMobileAndDeletedEquals(String mobile, String deleted, Pageable pageable); // Page<Visitor> findAllByVisitorMobileAndDeletedEquals(String mobile, String deleted, Pageable pageable);
} }
...@@ -10,6 +10,7 @@ import javax.validation.constraints.NotEmpty; ...@@ -10,6 +10,7 @@ import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern; import javax.validation.constraints.Pattern;
import lombok.*; import lombok.*;
import lombok.experimental.FieldDefaults; import lombok.experimental.FieldDefaults;
import org.hibernate.annotations.Comment;
/** /**
* @author tzl * @author tzl
...@@ -34,8 +35,28 @@ public class CarParam implements Serializable { ...@@ -34,8 +35,28 @@ public class CarParam implements Serializable {
@ApiModelProperty(value = "车辆类型", example = "1") @ApiModelProperty(value = "车辆类型", example = "1")
String carType; String carType;
@ApiModelProperty(value = "车辆类型", example = "1") @ApiModelProperty(value = "标签卡", example = "BT82737612", required = true)
String labelCard; String labelCard;
// @ApiModelProperty(value = "对应访客id", example = "1", required = true)
// Long visitorId; @ApiModelProperty(value = "司机名称", example = "张三", required = true)
String driverName;
@ApiModelProperty(value = "司机电话", example = "17674741309", required = true)
@Pattern(regexp = RegEx.MOBILE, message = "请输入正确的号码")
String mobile;
@ApiModelProperty(value = "所属公司", example = "壹润科技")
String orgId;
@Comment("被访人电话")
@ApiModelProperty(value = "被访人电话", example = "17674741309")
String intervieweeMobile;
@Comment("被访人姓名")
@ApiModelProperty(value = "被访人姓名", example = "李四")
String intervieweeName;
@Comment("来访原因")
@ApiModelProperty(value = "来访原因", example = "工作")
String reason;
} }
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.visitor; package com.yiring.app.param.visitor;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yiring.common.constant.RegEx; import com.yiring.common.constant.RegEx;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime;
import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern; import javax.validation.constraints.Pattern;
import lombok.*; import lombok.*;
...@@ -38,41 +36,26 @@ public class VisitorParam implements Serializable { ...@@ -38,41 +36,26 @@ public class VisitorParam implements Serializable {
String visitorMobile; String visitorMobile;
@ApiModelProperty(value = "到访人身份证", example = "430441190001255417", required = true) @ApiModelProperty(value = "到访人身份证", example = "430441190001255417", required = true)
@Pattern(regexp = RegEx.CARDNO, message = "手机号码格式不正确")
@NotEmpty(message = "到访人身份证不能为空") @NotEmpty(message = "到访人身份证不能为空")
String visitorCarNum; String visitorCarNum;
@ApiModelProperty(value = "是否特殊作业", example = "fasle", required = true) @ApiModelProperty(value = "是否特殊作业", example = "fasle", required = true)
String taskType; String taskType;
@ApiModelProperty(value = "访客来源", example = "外部邀请", required = true)
String visitorSource;
@ApiModelProperty(value = "访客所属公司", example = "壹润科技") @ApiModelProperty(value = "访客所属公司", example = "壹润科技")
String orgId; String orgId;
@ApiModelProperty(value = "被访人id", example = "1", required = true) @ApiModelProperty(value = "被访人电话", example = "17674741309")
String intervieweeId; @Pattern(regexp = RegEx.MOBILE, message = "手机号码格式不正确")
String intervieweeMobile;
@ApiModelProperty(value = "被访人姓名", example = "李敬")
String intervieweeName;
@ApiModelProperty(value = "来访原因", example = "看看", required = true) @ApiModelProperty(value = "来访原因", example = "看看", required = true)
String reason; String reason;
@ApiModelProperty(value = "来访时间", example = "2022-04-19 14:28:00") @ApiModelProperty(value = "人员标签卡", example = "1")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
LocalDateTime appOfVisitTime;
@ApiModelProperty(value = "是否有车(是 1 ,否 2)", example = "2")
Integer hasCar;
@ApiModelProperty(value = "车牌号码", example = "湘A99999")
@Pattern(regexp = RegEx.CARNUM, message = "车牌号码格式不正确")
String carNum;
@ApiModelProperty(value = "车辆类型", example = "货车")
String carType;
@ApiModelProperty(value = "车辆标签卡", example = "1")
String labelCard; String labelCard;
@ApiModelProperty(value = "主访人员id", example = "1")
Long mainVisitorId;
} }
...@@ -15,8 +15,14 @@ import java.util.List; ...@@ -15,8 +15,14 @@ import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.persistence.criteria.Order;
import javax.persistence.criteria.Predicate;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.data.domain.*; import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/** /**
...@@ -76,7 +82,16 @@ public class IconServiceImpl implements IconService { ...@@ -76,7 +82,16 @@ public class IconServiceImpl implements IconService {
public Result<PageVo<IconVo>> pageIcon(PageParam pageParam) { public Result<PageVo<IconVo>> pageIcon(PageParam pageParam) {
//分页 //分页
Pageable pageable = PageRequest.of(pageParam.getPageNo() - 1, pageParam.getPageSize()); Pageable pageable = PageRequest.of(pageParam.getPageNo() - 1, pageParam.getPageSize());
Page<Icon> all = iconRepository.findAll(pageable); Page<Icon> all = iconRepository.findAll(
(Specification<Icon>) (root, query, criteriaBuilder) -> {
Predicate[] predicates = new Predicate[0];
Order order = criteriaBuilder.desc(root.get(Icon.Fields.updateTime));
query.where();
query.orderBy(order);
return criteriaBuilder.and();
},
pageable
);
List<IconVo> data = all List<IconVo> data = all
.get() .get()
.map(icon -> { .map(icon -> {
......
...@@ -400,8 +400,7 @@ public class UserAppServiceImpl implements UserAppService { ...@@ -400,8 +400,7 @@ public class UserAppServiceImpl implements UserAppService {
postOptional.ifPresent(user::setPost); postOptional.ifPresent(user::setPost);
} }
user.setLinkId(Convert.toLong(id)); user.setLinkId(Convert.toLong(id));
userRepository.save(user); userRepository.saveAndFlush(user);
return Result.ok(); return Result.ok();
} }
......
...@@ -2,10 +2,12 @@ ...@@ -2,10 +2,12 @@
package com.yiring.app.service.visitor; package com.yiring.app.service.visitor;
import com.yiring.app.domain.visitor.Car; import com.yiring.app.domain.visitor.Car;
import com.yiring.app.param.visitor.CarParam;
import com.yiring.app.param.visitor.CarQueryParam; import com.yiring.app.param.visitor.CarQueryParam;
import com.yiring.app.vo.visitor.CarVo; import com.yiring.app.vo.visitor.CarVo;
import com.yiring.common.core.Result; import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam; import com.yiring.common.param.IdParam;
import com.yiring.common.param.IndexParam;
import com.yiring.common.vo.PageVo; import com.yiring.common.vo.PageVo;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;
...@@ -18,10 +20,10 @@ public interface CarService { ...@@ -18,10 +20,10 @@ public interface CarService {
/** /**
* 添加车辆来访信息 * 添加车辆来访信息
* *
* @param car Car * @param carParam CarParam
* @return 车辆来访信息id * @return 车辆来访信息id
*/ */
Result<Long> saveCarInfo(Car car); Result<CarVo> saveCarInfo(CarParam carParam);
/** /**
* 修改车辆来访信息 * 修改车辆来访信息
...@@ -59,10 +61,10 @@ public interface CarService { ...@@ -59,10 +61,10 @@ public interface CarService {
/** /**
* 查询车辆来访信息详情 * 查询车辆来访信息详情
* *
* @param idParam IdParam * @param indexParam IndexParam
* @return 车辆来访信息 * @return 车辆来访信息
*/ */
Result<CarVo> getCarInfo(IdParam idParam); Result<CarVo> getCarInfo(IndexParam indexParam);
/** /**
* 查询车辆来访信息(分页) * 查询车辆来访信息(分页)
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.visitor;
import com.yiring.app.param.visitor.InvitationAppQueryParam;
import com.yiring.app.param.visitor.InvitationParam;
import com.yiring.app.param.visitor.InvitationQueryParam;
import com.yiring.app.vo.visitor.InvitationDetailsVo;
import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam;
import com.yiring.common.vo.PageVo;
import javax.servlet.http.HttpServletResponse;
/**
* @author tzl
* @date 2022/4/24 16:57
*/
public interface InvitationService {
/**
* 发起邀请
* @param invitationParam 新增邀请入参
* @return 是否成功
*/
Result<String> saveInv(InvitationParam invitationParam);
/**
* 修改邀请
* @date 2022/4/24 17:50
* @return com.yiring.common.core.Result<java.lang.String>
*/
Result<String> updateInv(InvitationParam invitationParam, IdParam idParam);
/**
* 删除邀请
* @date 2022/4/24 17:52
* @return com.yiring.common.core.Result<java.lang.String>
*/
Result<String> deleteInv(IdParam idParam);
/**
* 分页
* @date 2022/4/24 17:56
* @return com.yiring.common.core.Result<com.yiring.common.vo.PageVo<java.lang.String>>
*/
Result<PageVo<InvitationDetailsVo>> pageInv(InvitationQueryParam invitationQueryParam);
/**
* 撤回邀请
* @author tzl
* @date 2022/4/25 11:30
* @param idParam 主键id
* @return com.yiring.common.core.Result<java.lang.String>
*/
Result<String> recallInv(IdParam idParam);
/**
* 发送邀请
* @author tzl
* @date 2022/4/25 11:31
* @param idParam 主键id
* @return com.yiring.common.core.Result<java.lang.String>
*/
Result<String> sendInv(IdParam idParam);
/**
* 导出邀请信息
* @author tzl
* @date 2022/4/25 11:34
* @param invitationQueryParam 筛选条件
*/
void exportInv(InvitationQueryParam invitationQueryParam, HttpServletResponse response);
/**
* 小程序查询全部
* @author tzl
* @date 2022/4/28 10:56
* @param idParam 主键id
* @return com.yiring.common.core.Result<com.yiring.app.vo.visitor.InvitationDetailsVo>
*/
Result<InvitationDetailsVo> detailsInv(IdParam idParam);
/**
* 小程序用户查看邀请信息
* @author tzl
* @date 2022/4/28 11:30
* @param invitationAppQueryParam 入参
* @return com.yiring.common.core.Result<com.yiring.common.vo.PageVo<com.yiring.app.vo.visitor.InvitationVo>>
*/
Result<PageVo<InvitationDetailsVo>> findAllByVisitor_VisitorMobileAndVisitor_Deleted(
InvitationAppQueryParam invitationAppQueryParam
);
}
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.visitor; package com.yiring.app.service.visitor;
import com.yiring.app.param.visitor.VisitorAppQueryParam;
import com.yiring.app.param.visitor.VisitorParam; import com.yiring.app.param.visitor.VisitorParam;
import com.yiring.app.param.visitor.VisitorQueryParam; import com.yiring.app.param.visitor.VisitorQueryParam;
import com.yiring.app.vo.visitor.VisitorAppVo;
import com.yiring.app.vo.visitor.VisitorDetailsVo; import com.yiring.app.vo.visitor.VisitorDetailsVo;
import com.yiring.app.vo.visitor.VisitorVo; import com.yiring.app.vo.visitor.VisitorVo;
import com.yiring.common.core.Result; import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam; import com.yiring.common.param.IndexParam;
import com.yiring.common.vo.PageVo; import com.yiring.common.vo.PageVo;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
...@@ -22,7 +20,7 @@ public interface VisitorService { ...@@ -22,7 +20,7 @@ public interface VisitorService {
* @param visitorParam 新增访客入参 * @param visitorParam 新增访客入参
* @return 是否成功 * @return 是否成功
*/ */
Result<String> saveVisitor(VisitorParam visitorParam); Result<VisitorDetailsVo> saveVisitor(VisitorParam visitorParam);
// /** // /**
// * 访客删除 // * 访客删除
...@@ -37,14 +35,14 @@ public interface VisitorService { ...@@ -37,14 +35,14 @@ public interface VisitorService {
* @param idParam 修改访客的主键id * @param idParam 修改访客的主键id
* @return 是否成功 * @return 是否成功
*/ */
Result<String> updateVisitor(VisitorParam visitorParam, IdParam idParam); // Result<String> updateVisitor(VisitorParam visitorParam, IdParam idParam);
/** /**
* 查询访客详情 * 查询访客详情
* @param idParam 主键id * @param indexParam 主键id
* @return 访客信息 * @return 访客信息
*/ */
Result<VisitorDetailsVo> selectVisitor(IdParam idParam); Result<VisitorDetailsVo> selectVisitor(IndexParam indexParam);
/** /**
* 分页查询 * 分页查询
...@@ -59,28 +57,27 @@ public interface VisitorService { ...@@ -59,28 +57,27 @@ public interface VisitorService {
* @param response HttpServletResponse * @param response HttpServletResponse
*/ */
void exportVisitor(VisitorQueryParam visitorQueryParam, HttpServletResponse response); void exportVisitor(VisitorQueryParam visitorQueryParam, HttpServletResponse response);
// /**
// * 发卡
// * @param labelCard 标签卡号
// * @param idParam 主键id
// * @return 是否成功
// */
// Result<String> cardSend(String labelCard, IdParam idParam);
//
// /**
// * 收卡
// * @param idParam 主键id
// * @return 是否成功
// */
// Result<String> cardRec(IdParam idParam);
/** // /**
* 发卡 // * 小程序查看来访记录
* @param labelCard 标签卡号 // * @author tzl
* @param idParam 主键id // * @date 2022/4/29 15:03
* @return 是否成功 // * @param visitorAppQueryParam 入参
*/ // * @return com.yiring.common.core.Result<com.yiring.app.vo.visitor.VisitorVo>
Result<String> cardSend(String labelCard, IdParam idParam); // */
// Result<PageVo<VisitorAppVo>> selectInfo(VisitorAppQueryParam visitorAppQueryParam);
/**
* 收卡
* @param idParam 主键id
* @return 是否成功
*/
Result<String> cardRec(IdParam idParam);
/**
* 小程序查看来访记录
* @author tzl
* @date 2022/4/29 15:03
* @param visitorAppQueryParam 入参
* @return com.yiring.common.core.Result<com.yiring.app.vo.visitor.VisitorVo>
*/
Result<PageVo<VisitorAppVo>> selectInfo(VisitorAppQueryParam visitorAppQueryParam);
} }
...@@ -3,16 +3,19 @@ package com.yiring.app.service.visitor.impl; ...@@ -3,16 +3,19 @@ package com.yiring.app.service.visitor.impl;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.github.liaochong.myexcel.core.DefaultStreamExcelBuilder; import com.github.liaochong.myexcel.core.DefaultStreamExcelBuilder;
import com.yiring.app.domain.location.LocationTag;
import com.yiring.app.domain.location.LocationTagRepository;
import com.yiring.app.domain.visitor.Car; import com.yiring.app.domain.visitor.Car;
import com.yiring.app.domain.visitor.CarRepository; import com.yiring.app.domain.visitor.CarRepository;
import com.yiring.app.excel.visitor.CarExportExcel; import com.yiring.app.excel.visitor.CarExportExcel;
import com.yiring.app.param.visitor.CarParam;
import com.yiring.app.param.visitor.CarQueryParam; import com.yiring.app.param.visitor.CarQueryParam;
import com.yiring.app.service.visitor.CarService; import com.yiring.app.service.visitor.CarService;
import com.yiring.app.vo.visitor.CarVo; import com.yiring.app.vo.visitor.CarVo;
import com.yiring.auth.domain.role.Role;
import com.yiring.common.core.Result; import com.yiring.common.core.Result;
import com.yiring.common.core.Status; import com.yiring.common.core.Status;
import com.yiring.common.param.IdParam; import com.yiring.common.param.IdParam;
import com.yiring.common.param.IndexParam;
import com.yiring.common.vo.PageVo; import com.yiring.common.vo.PageVo;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.URLEncoder; import java.net.URLEncoder;
...@@ -47,22 +50,26 @@ public class CarServiceImpl implements CarService { ...@@ -47,22 +50,26 @@ public class CarServiceImpl implements CarService {
@Resource @Resource
CarRepository carRepository; CarRepository carRepository;
@Resource
LocationTagRepository locationTagRepository;
@Override @Override
public Result<Long> saveCarInfo(Car car) { public Result<CarVo> saveCarInfo(CarParam carParam) {
// 检查车牌号车辆是否已经在园内 // 检查车牌号车辆是否已经在园内
if (carRepository.hasCarInfoByCarNum(car.getCarNum()) > 0) { if (carRepository.hasCarInfoByCarNum(carParam.getCarNum()) > 0) {
return Result.no(Status.BAD_REQUEST, "您的车牌号已存在"); return Result.no(Status.BAD_REQUEST, "车辆已在园区内");
} }
// Car car = Car Car car = Car.builder().cardSendTime(LocalDateTime.now()).createTime(LocalDateTime.now()).build();
// .builder() BeanUtils.copyProperties(carParam, car);
// .carNum(carParam.getCarNum()) LocationTag byCode = locationTagRepository.findByCode(carParam.getLabelCard());
// .carType(carParam.getCarType()) //添加一条车辆信息
// .labelCard(carParam.getLabelCard()) Car carResult = carRepository.saveAndFlush(car);
// .createTime(LocalDateTime.now()) byCode.setCar(carResult);
// // .visitorId(carParam.getVisitorId()) //绑定标签和车辆的关系
// .build(); locationTagRepository.saveAndFlush(byCode);
Car carReuslt = carRepository.saveAndFlush(car); CarVo carVo = new CarVo();
return Result.ok(carReuslt.getId()); BeanUtils.copyProperties(carResult, carVo);
return Result.ok(carVo);
} }
@Override @Override
...@@ -120,15 +127,13 @@ public class CarServiceImpl implements CarService { ...@@ -120,15 +127,13 @@ public class CarServiceImpl implements CarService {
} }
@Override @Override
public Result<CarVo> getCarInfo(IdParam idParam) { public Result<CarVo> getCarInfo(IndexParam indexParam) {
Optional<Car> optional = carRepository.findById(idParam.getId()); Car byLabelCard = carRepository.findByLabelCard(indexParam.getStr());
if (optional.isEmpty()) { if (byLabelCard == null) {
return Result.no(Status.NOT_FOUND); return Result.no(Status.NOT_FOUND);
} }
Car entity = optional.get();
CarVo vo = new CarVo(); CarVo vo = new CarVo();
BeanUtils.copyProperties(entity, vo, Role.Fields.permissions); BeanUtils.copyProperties(byLabelCard, vo);
return Result.ok(vo); return Result.ok(vo);
} }
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.visitor.impl;
import cn.hutool.core.util.StrUtil;
import com.github.liaochong.myexcel.core.DefaultStreamExcelBuilder;
import com.yiring.app.domain.visitor.Invitation;
import com.yiring.app.domain.visitor.InvitationRepository;
import com.yiring.app.domain.visitor.Visitor;
import com.yiring.app.domain.visitor.VisitorRepository;
import com.yiring.app.excel.visitor.InvitationExportExcel;
import com.yiring.app.param.visitor.InvitationAppQueryParam;
import com.yiring.app.param.visitor.InvitationParam;
import com.yiring.app.param.visitor.InvitationQueryParam;
import com.yiring.app.service.visitor.InvitationService;
import com.yiring.app.vo.visitor.InvitationDetailsVo;
import com.yiring.auth.domain.dept.Department;
import com.yiring.auth.domain.user.User;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import com.yiring.common.param.IdParam;
import com.yiring.common.vo.PageVo;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.persistence.criteria.Join;
import javax.persistence.criteria.JoinType;
import javax.persistence.criteria.Order;
import javax.persistence.criteria.Predicate;
import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.BeanUtils;
import org.springframework.data.domain.*;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* @author tzl
* @version 1.0
* @description:
* @date 2022/4/24 17:05
*/
@Slf4j
@Transactional(rollbackFor = RuntimeException.class)
@Service
public class InvitationServiceImpl implements InvitationService {
@Resource
InvitationRepository invitationRepository;
@Resource
VisitorRepository visitorRepository;
@Override
public Result<String> saveInv(InvitationParam invitationParam) {
User user = User.builder().id(invitationParam.getInviterId()).build();
Visitor visitor = new Visitor();
BeanUtils.copyProperties(invitationParam, visitor);
visitor.setUser(user);
visitor.setCreateTime(LocalDateTime.now());
//身份证验证
// if(StrUtil.isNotBlank(invitationParam.getVisitorCarNum())){
// if (invitationParam.getVisitorCarNum().matches(RegEx.)) {
// return Result.no(Status.BAD_REQUEST, "请输入正确的车牌号码");
// }
// }
//设置创建时间和默认状态
Invitation invitation = Invitation
.builder()
.createTime(LocalDateTime.now())
.updateTime(LocalDateTime.now())
.status("已发送")
.visitor(visitor)
.InvitationMethod(invitationParam.getInvitationMethod())
.numOfVisitor(invitationParam.getNumOfVisitor())
.user(user)
.build();
//添加一条访客未到访信息
if (invitationParam.getInvitationMethod().equals("1")) {
visitor.setVisitorSource("邀请个人");
} else {
visitor.setVisitorSource("邀请公司");
}
visitorRepository.saveAndFlush(visitor);
invitationRepository.saveAndFlush(invitation);
//短信通知该手机用户
return Result.ok();
}
@Override
public Result<String> updateInv(InvitationParam invitationParam, IdParam idParam) {
Optional<Invitation> optional = invitationRepository.findById(idParam.getId());
if (optional.isEmpty()) {
return Result.no(Status.NOT_FOUND);
}
Invitation invitation = optional.get();
Visitor visitor2 = invitation.getVisitor();
if (invitation.getVisitor().getCardSendTime() != null) {
return Result.no(Status.BAD_REQUEST, "访客已到访,无法修改");
}
BeanUtils.copyProperties(invitationParam, invitation);
invitation.setUpdateTime(LocalDateTime.now());
invitationRepository.saveAndFlush(invitation);
//修改访客未到访信息
if (visitor2 == null) {
// 为空添加
visitor2 = new Visitor();
}
BeanUtils.copyProperties(invitationParam, visitor2);
visitor2.setUser(invitation.getUser());
// visitor2.setIntervieweeId(invitationParam.getInviterId());
visitorRepository.saveAndFlush(visitor2);
//短信通知该手机用户
//
//
return Result.ok();
}
@Override
public Result<String> deleteInv(IdParam idParam) {
Optional<Invitation> optional = invitationRepository.findById(idParam.getId());
if (optional.isEmpty()) {
return Result.no(Status.NOT_FOUND);
}
Invitation invitation = optional.get();
invitationRepository.delete(invitation);
// visitorRepository.delete(invitation.getVisitor());
//短信通知该手机用户邀请取消
//
//
return Result.ok();
}
@Override
public Result<PageVo<InvitationDetailsVo>> pageInv(InvitationQueryParam invitationQueryParam) {
PageVo<InvitationDetailsVo> resultVo;
//排序
Sort sort = Sort.by(Sort.Order.desc(Invitation.Fields.updateTime));
if (Objects.nonNull(invitationQueryParam.getPageNo()) && Objects.nonNull(invitationQueryParam.getPageSize())) {
//分页
Pageable pageable = PageRequest.of(
invitationQueryParam.getPageNo() - 1,
invitationQueryParam.getPageSize()
);
Page<Invitation> all = invitationRepository.findAll(condition(invitationQueryParam), pageable);
List<InvitationDetailsVo> data = all
.get()
.map(invitation -> {
InvitationDetailsVo vo = new InvitationDetailsVo();
BeanUtils.copyProperties(invitation, vo);
//翻译邀请人姓名,部门
if (invitation.getUser() != null) {
InvitationDetailsVo.User user = new InvitationDetailsVo.User();
user.setDeptName(invitation.getUser().getDepartment().getName());
user.setRealName(invitation.getUser().getRealName());
user.setMobile(invitation.getUser().getMobile());
user.setId(invitation.getUser().getId());
vo.setUser(user);
}
return vo;
})
.collect(Collectors.toList());
resultVo = PageVo.build(data, all.getTotalElements());
} else {
List<Invitation> all = invitationRepository.findAll(condition(invitationQueryParam), sort);
List<InvitationDetailsVo> data = all
.stream()
.map(invitation -> {
InvitationDetailsVo vo = new InvitationDetailsVo();
BeanUtils.copyProperties(invitation, vo);
//翻译邀请人姓名,部门
if (invitation.getUser() != null) {
InvitationDetailsVo.User user = new InvitationDetailsVo.User();
user.setDeptName(invitation.getUser().getDepartment().getName());
user.setRealName(invitation.getUser().getRealName());
user.setMobile(invitation.getUser().getMobile());
user.setId(invitation.getUser().getId());
vo.setUser(user);
}
return vo;
})
.collect(Collectors.toList());
resultVo = PageVo.build(data, data.size());
}
return Result.ok(resultVo);
}
@Override
public Result<String> recallInv(IdParam idParam) {
Optional<Invitation> optional = invitationRepository.findById(idParam.getId());
if (optional.isEmpty()) {
return Result.no(Status.NOT_FOUND);
}
Invitation invitation = optional.get();
if (invitation.getVisitor().getCardSendTime() != null) {
return Result.no(Status.BAD_REQUEST, "访客已到访,无法修改");
}
if (invitation.getVisitor().getAppOfVisitTime().isBefore(LocalDateTime.now())) {
return Result.no(Status.BAD_REQUEST, "预约时间已过");
}
invitation.setStatus("已撤回");
invitation.setUpdateTime(LocalDateTime.now());
Visitor visitor = invitation.getVisitor();
// 逻辑删除对应访客信息
if (visitor != null) {
visitor.setDeleted("Y");
visitorRepository.saveAndFlush(visitor);
}
invitationRepository.saveAndFlush(invitation);
return Result.ok();
}
@Override
public Result<String> sendInv(IdParam idParam) {
Optional<Invitation> optional = invitationRepository.findById(idParam.getId());
if (optional.isEmpty()) {
return Result.no(Status.NOT_FOUND);
}
Invitation invitation = optional.get();
if (invitation.getVisitor().getAppOfVisitTime().isBefore(LocalDateTime.now())) {
return Result.no(Status.BAD_REQUEST, "预约时间已过");
}
invitation.setStatus("已发送");
invitation.setUpdateTime(LocalDateTime.now());
//添加访客信息
Visitor visitor = invitation.getVisitor();
//
if (visitor != null) {
visitor.setDeleted("N");
visitorRepository.saveAndFlush(visitor);
}
invitationRepository.saveAndFlush(invitation);
return Result.ok();
}
@Override
public void exportInv(InvitationQueryParam invitationQueryParam, HttpServletResponse response) {
List<Invitation> invitations = invitationRepository.findAll(condition(invitationQueryParam));
List<InvitationExportExcel> invitationExportExcels = invitations
.stream()
.map(invitation -> {
InvitationExportExcel invitationExportExcel = new InvitationExportExcel();
BeanUtils.copyProperties(invitation, invitationExportExcel);
BeanUtils.copyProperties(invitation.getVisitor(), invitationExportExcel);
invitationExportExcel.setInviterName(invitation.getUser().getRealName());
invitationExportExcel.setInviterDept(invitation.getUser().getDepartment().getName());
return invitationExportExcel;
})
.toList();
try (
DefaultStreamExcelBuilder<InvitationExportExcel> defaultStreamExcelBuilder = DefaultStreamExcelBuilder
.of(InvitationExportExcel.class)
.threadPool(Executors.newFixedThreadPool(2))
.rowHeight(14)
.titleRowHeight(14)
.widths(8)
.style(
"cell->vertical-align:center;text-align:center",
"title->vertical-align:center;text-align:center;font-weight:bold;font-family:等线"
)
.start()
) {
defaultStreamExcelBuilder.append(invitationExportExcels);
String fileName = URLEncoder.encode("邀请信息.xlsx", StandardCharsets.UTF_8);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
OutputStream out = response.getOutputStream();
Workbook workbook = defaultStreamExcelBuilder.fixedTitles().build();
workbook.write(out);
workbook.close();
out.flush();
out.close();
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new RuntimeException("导出邀请信息失败: " + e.getMessage());
}
}
@Override
public Result<InvitationDetailsVo> detailsInv(IdParam idParam) {
Optional<Invitation> byId = invitationRepository.findById(idParam.getId());
if (byId.isEmpty()) {
return Result.no(Status.NOT_FOUND);
}
Invitation invitation = byId.get();
InvitationDetailsVo vo = new InvitationDetailsVo();
BeanUtils.copyProperties(invitation, vo);
//翻译邀请人姓名,部门
if (invitation.getUser() != null) {
InvitationDetailsVo.User user = new InvitationDetailsVo.User();
user.setDeptName(invitation.getUser().getDepartment().getName());
user.setRealName(invitation.getUser().getRealName());
user.setMobile(invitation.getUser().getMobile());
vo.setUser(user);
}
return Result.ok(vo);
}
@Override
public Result<PageVo<InvitationDetailsVo>> findAllByVisitor_VisitorMobileAndVisitor_Deleted(
InvitationAppQueryParam invitationAppQueryParam
) {
PageVo<InvitationDetailsVo> resultVo;
//排序
Sort sort = Sort.by(Sort.Order.desc(Visitor.Fields.createTime));
if (
Objects.nonNull(invitationAppQueryParam.getPageNo()) &&
Objects.nonNull(invitationAppQueryParam.getPageSize())
) {
//分页
Pageable pageable = PageRequest.of(
invitationAppQueryParam.getPageNo() - 1,
invitationAppQueryParam.getPageSize()
);
Page<Invitation> all = invitationRepository.findAllByVisitor_VisitorMobileAndVisitor_Deleted(
invitationAppQueryParam.getVisitorMobile(),
"N",
pageable
);
List<InvitationDetailsVo> data = all
.get()
.map(invitationResult -> {
InvitationDetailsVo vo = new InvitationDetailsVo();
BeanUtils.copyProperties(invitationResult, vo);
//翻译邀请人姓名,部门
return getInvitationDetailsVo(invitationResult, vo);
})
.collect(Collectors.toList());
resultVo = PageVo.build(data, all.getTotalElements());
} else {
Visitor visitor = Visitor
.builder()
.visitorMobile(invitationAppQueryParam.getVisitorMobile())
.deleted("N")
.build();
Invitation invitation = Invitation.builder().visitor(visitor).build();
List<Invitation> all = invitationRepository.findAll(Example.of(invitation), sort);
List<InvitationDetailsVo> data = all
.stream()
.map(invitationResult -> {
InvitationDetailsVo vo = new InvitationDetailsVo();
BeanUtils.copyProperties(invitationResult, vo);
//翻译邀请人姓名,部门
return getInvitationDetailsVo(invitationResult, vo);
})
.collect(Collectors.toList());
resultVo = PageVo.build(data, data.size());
}
return Result.ok(resultVo);
}
private InvitationDetailsVo getInvitationDetailsVo(Invitation invitationResult, InvitationDetailsVo vo) {
if (invitationResult.getUser() != null) {
InvitationDetailsVo.User user = new InvitationDetailsVo.User();
user.setDeptName(invitationResult.getUser().getDepartment().getName());
user.setRealName(invitationResult.getUser().getRealName());
user.setMobile(invitationResult.getUser().getMobile());
vo.setUser(user);
}
return vo;
}
public Specification<Invitation> condition(InvitationQueryParam invitationQueryParam) {
return (root, query, criteriaBuilder) -> {
Join<Invitation, Visitor> joinVisitor = root.join("visitor", JoinType.LEFT);
Join<Invitation, User> joinUser = joinVisitor.join("user", JoinType.LEFT);
Join<User, Department> departmentJoin = joinUser.join("department", JoinType.LEFT);
// Join<User, Department> joinDepartment = root.join(User.Fields.department, JoinType.LEFT);
List<Predicate> list = new ArrayList<>();
if (StrUtil.isNotBlank(invitationQueryParam.getVisitorName())) {
list.add(
criteriaBuilder.like(
joinVisitor.get(Visitor.Fields.visitorName).as(String.class),
"%" + invitationQueryParam.getVisitorName() + "%"
)
);
}
if (StrUtil.isNotBlank(invitationQueryParam.getVisitorMobile())) {
list.add(
criteriaBuilder.like(
joinVisitor.get(Visitor.Fields.visitorMobile).as(String.class),
"%" + invitationQueryParam.getVisitorMobile() + "%"
)
);
}
if (StrUtil.isNotBlank(invitationQueryParam.getOrgId())) {
list.add(
criteriaBuilder.like(
joinVisitor.get(Visitor.Fields.orgId).as(String.class),
"%" + invitationQueryParam.getOrgId() + "%"
)
);
}
if (StrUtil.isNotBlank(invitationQueryParam.getTaskType())) {
list.add(
criteriaBuilder.equal(
joinVisitor.get(Visitor.Fields.taskType).as(String.class),
invitationQueryParam.getTaskType()
)
);
}
if (invitationQueryParam.getRealName() != null) {
list.add(
criteriaBuilder.like(
joinUser.get(User.Fields.realName).as(String.class),
"%" + invitationQueryParam.getRealName() + "%"
)
);
}
if (invitationQueryParam.getDeptName() != null) {
list.add(
criteriaBuilder.like(
departmentJoin.get(Department.Fields.name).as(String.class),
"%" + invitationQueryParam.getDeptName() + "%"
)
);
}
if (
Objects.nonNull(invitationQueryParam.getAppOfVisitTimeStart()) &&
Objects.nonNull(invitationQueryParam.getAppOfVisitTimeEnd())
) {
//预约到访时间区间段查询
list.add(
criteriaBuilder.between(
joinVisitor.get(Visitor.Fields.appOfVisitTime),
invitationQueryParam.getAppOfVisitTimeStart(),
invitationQueryParam.getAppOfVisitTimeEnd()
)
);
}
Order order = criteriaBuilder.desc(root.get(Invitation.Fields.updateTime));
Predicate[] predicates = new Predicate[list.size()];
query.where(list.toArray(predicates));
query.orderBy(order);
return criteriaBuilder.and(list.toArray(predicates));
};
}
// /**
// * 查看被邀人手机号码是否已经发出邀请
// *
// * @param mobile 手机号码
// * @return boolean
// * @author tzl
// * @date 2022/4/24 17:27
// */
// public boolean hasVisitorMobile(String mobile) {
// Invitation invitation = Invitation.builder().visitorMobile(mobile).status("已发送").build();
// long count = invitationRepository.count(Example.of(invitation));
// return count > 0;
// }
}
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.visitor.impl; package com.yiring.app.service.visitor.impl;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.github.liaochong.myexcel.core.DefaultStreamExcelBuilder; import com.github.liaochong.myexcel.core.DefaultStreamExcelBuilder;
import com.yiring.app.domain.visitor.Car; import com.yiring.app.domain.location.LocationTag;
import com.yiring.app.domain.location.LocationTagRepository;
import com.yiring.app.domain.visitor.Visitor; import com.yiring.app.domain.visitor.Visitor;
import com.yiring.app.domain.visitor.VisitorRepository; import com.yiring.app.domain.visitor.VisitorRepository;
import com.yiring.app.excel.visitor.VisitorExportExcel; import com.yiring.app.excel.visitor.VisitorExportExcel;
import com.yiring.app.param.visitor.VisitorAppQueryParam; import com.yiring.app.param.user.UserAddParam;
import com.yiring.app.param.visitor.VisitorParam; import com.yiring.app.param.visitor.VisitorParam;
import com.yiring.app.param.visitor.VisitorQueryParam; import com.yiring.app.param.visitor.VisitorQueryParam;
import com.yiring.app.service.user.UserAppService;
import com.yiring.app.service.visitor.CarService; import com.yiring.app.service.visitor.CarService;
import com.yiring.app.service.visitor.VisitorService; import com.yiring.app.service.visitor.VisitorService;
import com.yiring.app.vo.visitor.VisitorAppVo;
import com.yiring.app.vo.visitor.VisitorDetailsVo; import com.yiring.app.vo.visitor.VisitorDetailsVo;
import com.yiring.app.vo.visitor.VisitorVo; import com.yiring.app.vo.visitor.VisitorVo;
import com.yiring.auth.domain.user.User; import com.yiring.auth.domain.user.User;
import com.yiring.common.constant.RegEx; import com.yiring.auth.domain.user.UserRepository;
import com.yiring.common.core.Result; import com.yiring.common.core.Result;
import com.yiring.common.core.Status; import com.yiring.common.core.Status;
import com.yiring.common.domain.BasicEntity; import com.yiring.common.domain.BasicEntity;
import com.yiring.common.param.IdParam; import com.yiring.common.param.IndexParam;
import com.yiring.common.vo.PageVo; import com.yiring.common.vo.PageVo;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.URLEncoder; import java.net.URLEncoder;
...@@ -29,7 +31,6 @@ import java.time.LocalDateTime; ...@@ -29,7 +31,6 @@ import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.annotation.Resource; import javax.annotation.Resource;
...@@ -41,7 +42,10 @@ import javax.servlet.http.HttpServletResponse; ...@@ -41,7 +42,10 @@ import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.data.domain.*; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -61,8 +65,17 @@ public class VisitorServiceImpl implements VisitorService { ...@@ -61,8 +65,17 @@ public class VisitorServiceImpl implements VisitorService {
@Resource @Resource
CarService carService; CarService carService;
@Resource
UserAppService userAppService;
@Resource
UserRepository userRepository;
@Resource
LocationTagRepository locationTagRepository;
@Override @Override
public Result<String> saveVisitor(VisitorParam visitorParam) { public Result<VisitorDetailsVo> saveVisitor(VisitorParam visitorParam) {
//设置创建时间和默认状态 //设置创建时间和默认状态
Visitor visitor = Visitor Visitor visitor = Visitor
.builder() .builder()
...@@ -71,119 +84,41 @@ public class VisitorServiceImpl implements VisitorService { ...@@ -71,119 +84,41 @@ public class VisitorServiceImpl implements VisitorService {
.cardSendTime(LocalDateTime.now()) .cardSendTime(LocalDateTime.now())
.build(); .build();
BeanUtils.copyProperties(visitorParam, visitor); BeanUtils.copyProperties(visitorParam, visitor);
if (visitorParam.getMainVisitorId() != null) { //创建用户
//如果主访人员id不为空, UserAddParam user = UserAddParam
Visitor optional = visitorRepository.findByIdAndDeleted(visitorParam.getMainVisitorId(), "N");
if (optional == null) {
return Result.no(Status.NOT_FOUND, "信息失效,请联系管理员");
}
visitor.setMainVisitorId(visitorParam.getMainVisitorId());
}
//如果有车, 填车辆信息,
if (visitorParam.getHasCar() == 1) {
//校验车辆必填信息
if (StrUtil.isBlank(visitorParam.getCarNum())) {
return Result.no(Status.BAD_REQUEST, "请输入车牌号码");
}
if (visitorParam.getCarNum().matches(RegEx.CARNUM)) {
return Result.no(Status.BAD_REQUEST, "请输入正确的车牌号码");
}
if (StrUtil.isBlank(visitorParam.getCarType())) {
return Result.no(Status.BAD_REQUEST, "请输入车辆类型");
}
if (StrUtil.isBlank(visitorParam.getLabelCard())) {
return Result.no(Status.BAD_REQUEST, "请输入车辆标签卡");
}
//需要判断标签卡是否有效
Car car = Car
.builder() .builder()
.carNum(visitorParam.getCarNum()) .realName(visitorParam.getVisitorName())
.carType(visitorParam.getCarType()) .mobile(visitorParam.getVisitorMobile())
.labelCard(visitorParam.getLabelCard()) .type(User.Type.GUEST)
.createTime(LocalDateTime.now()) .deptId(1524237948868890624L)
.isSpecial(false)
.gender(true)
.uuid(RandomUtil.randomNumbers(8))
.build(); .build();
carService.saveCarInfo(car); userAppService.addUser(user);
visitor.setCar(car); User byMobile = userRepository.findByMobile(visitorParam.getVisitorMobile());
} if (byMobile == null) {
visitorRepository.saveAndFlush(visitor); return Result.no(Status.BAD_REQUEST, "标签卡有误");
return Result.ok(); }
//建立标签卡和访客的关系(发卡操作)
LocationTag byCode = locationTagRepository.findByCode(visitorParam.getLabelCard());
byCode.setUser(byMobile);
locationTagRepository.saveAndFlush(byCode);
//添加一条访客到访记录
Visitor visitor1 = visitorRepository.saveAndFlush(visitor);
VisitorDetailsVo visitorDetailsVo = new VisitorDetailsVo();
BeanUtils.copyProperties(visitor1, visitorDetailsVo);
return Result.ok(visitorDetailsVo);
} }
@Override @Override
public Result<String> updateVisitor(VisitorParam visitorParam, IdParam idParam) { public Result<VisitorDetailsVo> selectVisitor(IndexParam indexParam) {
Visitor optional = visitorRepository.findByIdAndDeleted(idParam.getId(), "N"); Visitor visitor = visitorRepository.findByLabelCardAndDeleted(indexParam.getStr(), "N");
if (optional == null) { if (visitor == null) {
return Result.no(Status.NOT_FOUND); return Result.no(Status.NOT_FOUND);
} }
//判断标签卡是否正确 生效
Car car = optional.getCar();
if (car != null) {
BeanUtils.copyProperties(visitorParam, car);
carService.updateCarInfo(car);
} else {
if (StrUtil.isNotBlank(visitorParam.getCarNum())) {
car =
Car
.builder()
.carNum(visitorParam.getCarNum())
.carType(visitorParam.getCarType())
.labelCard(visitorParam.getLabelCard())
.createTime(LocalDateTime.now())
.build();
optional.setCar(car);
carService.saveCarInfo(car);
} else {
optional.setCar(null);
}
}
BeanUtils.copyProperties(visitorParam, optional);
optional.setUpdateTime(LocalDateTime.now());
visitorRepository.saveAndFlush(optional);
return Result.ok();
}
@Override
public Result<VisitorDetailsVo> selectVisitor(IdParam idParam) {
Optional<Visitor> optional = visitorRepository.findById(idParam.getId());
if (optional.isEmpty()) {
return Result.no(Status.NOT_FOUND);
}
Visitor visitor = optional.get();
List<Visitor> list = new ArrayList<>();
List<VisitorDetailsVo.VisitorResultVo> listResult = new ArrayList<>();
//主访人id为空 为主访问人,查询出其下面的随访人的姓名和电话
if (visitor.getMainVisitorId() == null) {
list = visitorRepository.findAllByMainVisitorIdAndDeletedEquals(visitor.getId(), "N");
} else {
//查询此随访访客的主访客,
Visitor n = visitorRepository.findByIdAndDeleted(visitor.getMainVisitorId(), "N");
if (n != null) {
//添加此随访人一同的随访人
list =
visitorRepository.findAllByMainVisitorIdAndDeletedEqualsAndIdIsNot(n.getId(), "N", visitor.getId());
list.add(n);
}
}
//处理返回数据的结构
if (list != null) {
list.forEach(visitorEntity -> {
VisitorDetailsVo.VisitorResultVo visitorResultVo = new VisitorDetailsVo.VisitorResultVo();
BeanUtils.copyProperties(visitorEntity, visitorResultVo);
listResult.add(visitorResultVo);
});
}
VisitorDetailsVo vo = new VisitorDetailsVo(); VisitorDetailsVo vo = new VisitorDetailsVo();
BeanUtils.copyProperties(visitor, vo); BeanUtils.copyProperties(visitor, vo);
VisitorDetailsVo.UserVo userVo = VisitorDetailsVo.UserVo
.builder()
.realName(visitor.getUser().getRealName())
.mobile(visitor.getUser().getMobile())
.deptName(visitor.getUser().getDepartment().getName())
.build();
vo.setUserVo(userVo);
vo.setList(listResult);
return Result.ok(vo); return Result.ok(vo);
} }
...@@ -201,11 +136,11 @@ public class VisitorServiceImpl implements VisitorService { ...@@ -201,11 +136,11 @@ public class VisitorServiceImpl implements VisitorService {
.map(visitor -> { .map(visitor -> {
VisitorVo vo = new VisitorVo(); VisitorVo vo = new VisitorVo();
BeanUtils.copyProperties(visitor, vo); BeanUtils.copyProperties(visitor, vo);
VisitorVo.UserVo userVo = VisitorVo.UserVo // VisitorVo.UserVo userVo = VisitorVo.UserVo
.builder() // .builder()
.realName(visitor.getUser().getRealName()) // .realName(visitor.getUser().getRealName())
.build(); // .build();
vo.setUserVo(userVo); // vo.setUserVo(userVo);
//翻译被访问人姓名 //翻译被访问人姓名
// if (vo.getIntervieweeId() != null) { // if (vo.getIntervieweeId() != null) {
// Optional<User> byId = userRepository.findById(vo.getIntervieweeId()); // Optional<User> byId = userRepository.findById(vo.getIntervieweeId());
...@@ -222,11 +157,11 @@ public class VisitorServiceImpl implements VisitorService { ...@@ -222,11 +157,11 @@ public class VisitorServiceImpl implements VisitorService {
.map(visitor -> { .map(visitor -> {
VisitorVo vo = new VisitorVo(); VisitorVo vo = new VisitorVo();
BeanUtils.copyProperties(visitor, vo); BeanUtils.copyProperties(visitor, vo);
VisitorVo.UserVo userVo = VisitorVo.UserVo // VisitorVo.UserVo userVo = VisitorVo.UserVo
.builder() // .builder()
.realName(visitor.getUser().getRealName()) // .realName(visitor.getUser().getRealName())
.build(); // .build();
vo.setUserVo(userVo); // vo.setUserVo(userVo);
return vo; return vo;
}) })
.collect(Collectors.toList()); .collect(Collectors.toList());
...@@ -279,65 +214,65 @@ public class VisitorServiceImpl implements VisitorService { ...@@ -279,65 +214,65 @@ public class VisitorServiceImpl implements VisitorService {
} }
} }
@Override // @Override
public Result<String> cardSend(String labelCard, IdParam idParam) { // public Result<String> cardSend(String labelCard, IdParam idParam) {
Optional<Visitor> optional = visitorRepository.findById(idParam.getId()); // Optional<Visitor> optional = visitorRepository.findById(idParam.getId());
if (optional.isEmpty()) { // if (optional.isEmpty()) {
return Result.no(Status.NOT_FOUND); // return Result.no(Status.NOT_FOUND);
} // }
Visitor visitor = optional.get(); // Visitor visitor = optional.get();
//状态变更为使用中 // //状态变更为使用中
visitor.setLabelCardStatus("2"); // visitor.setLabelCardStatus("2");
visitor.setCardSendTime(LocalDateTime.now()); // visitor.setCardSendTime(LocalDateTime.now());
visitor.setLabelCard(labelCard); // visitor.setLabelCard(labelCard);
visitorRepository.saveAndFlush(visitor); // visitorRepository.saveAndFlush(visitor);
return Result.ok(); // return Result.ok();
} // }
@Override
public Result<String> cardRec(IdParam idParam) {
Optional<Visitor> optional = visitorRepository.findById(idParam.getId());
if (optional.isEmpty()) {
return Result.no(Status.NOT_FOUND);
}
Visitor visitor = optional.get();
visitor.setLabelCardStatus("3");
visitor.setUpdateTime(LocalDateTime.now());
visitor.setCardRecTime(LocalDateTime.now());
visitorRepository.saveAndFlush(visitor);
return Result.ok();
}
@Override // @Override
public Result<PageVo<VisitorAppVo>> selectInfo(VisitorAppQueryParam visitorAppQueryParam) { // public Result<String> cardRec(IdParam idParam) {
PageVo<VisitorAppVo> resultVo; // Optional<Visitor> optional = visitorRepository.findById(idParam.getId());
//排序 // if (optional.isEmpty()) {
// return Result.no(Status.NOT_FOUND);
// }
// Visitor visitor = optional.get();
// visitor.setLabelCardStatus("3");
// visitor.setUpdateTime(LocalDateTime.now());
// visitor.setCardRecTime(LocalDateTime.now());
// visitorRepository.saveAndFlush(visitor);
// return Result.ok();
// }
//分页 // @Override
Pageable pageable = PageRequest.of(visitorAppQueryParam.getPageNo() - 1, visitorAppQueryParam.getPageSize()); // public Result<PageVo<VisitorAppVo>> selectInfo(VisitorAppQueryParam visitorAppQueryParam) {
Page<Visitor> all = visitorRepository.findAllByVisitorMobileAndDeletedEquals( // PageVo<VisitorAppVo> resultVo;
visitorAppQueryParam.getVisitorMobile(), // //排序
"N", //
pageable // //分页
); // Pageable pageable = PageRequest.of(visitorAppQueryParam.getPageNo() - 1, visitorAppQueryParam.getPageSize());
List<VisitorAppVo> data = all // Page<Visitor> all = visitorRepository.findAllByVisitorMobileAndDeletedEquals(
.get() // visitorAppQueryParam.getVisitorMobile(),
.map(visitor -> { // "N",
VisitorAppVo vo = new VisitorAppVo(); // pageable
vo.setId(visitor.getId()); // );
vo.setCardSendTime(visitor.getCardSendTime()); // List<VisitorAppVo> data = all
VisitorAppVo.UserVo userVo = VisitorAppVo.UserVo // .get()
.builder() // .map(visitor -> {
.realName(visitor.getUser().getRealName()) // VisitorAppVo vo = new VisitorAppVo();
.mobile(visitor.getVisitorMobile()) // vo.setId(visitor.getId());
.build(); // vo.setCardSendTime(visitor.getCardSendTime());
vo.setUserVo(userVo); // VisitorAppVo.UserVo userVo = VisitorAppVo.UserVo
return vo; // .builder()
}) // .realName(visitor.getUser().getRealName())
.collect(Collectors.toList()); // .mobile(visitor.getVisitorMobile())
resultVo = PageVo.build(data, all.getTotalElements()); // .build();
return Result.ok(resultVo); // vo.setUserVo(userVo);
} // return vo;
// })
// .collect(Collectors.toList());
// resultVo = PageVo.build(data, all.getTotalElements());
// return Result.ok(resultVo);
// }
public Specification<Visitor> condition(VisitorQueryParam visitorQueryParam) { public Specification<Visitor> condition(VisitorQueryParam visitorQueryParam) {
return (root, query, criteriaBuilder) -> { return (root, query, criteriaBuilder) -> {
...@@ -381,23 +316,6 @@ public class VisitorServiceImpl implements VisitorService { ...@@ -381,23 +316,6 @@ public class VisitorServiceImpl implements VisitorService {
); );
} }
if (StrUtil.isNotBlank(visitorQueryParam.getOrgId())) {
//所属单位查询
list.add(
criteriaBuilder.like(root.get(Visitor.Fields.orgId), "%" + visitorQueryParam.getOrgId() + "%")
);
}
if (StrUtil.isNotBlank(visitorQueryParam.getVisitorSource())) {
//访客来源
list.add(
criteriaBuilder.like(
root.get(Visitor.Fields.visitorSource),
"%" + visitorQueryParam.getVisitorSource() + "%"
)
);
}
if (StrUtil.isNotBlank(visitorQueryParam.getIntervieweeId())) { if (StrUtil.isNotBlank(visitorQueryParam.getIntervieweeId())) {
//被访人 //被访人
list.add(criteriaBuilder.equal(join.get(BasicEntity.Fields.id), visitorQueryParam.getIntervieweeId())); list.add(criteriaBuilder.equal(join.get(BasicEntity.Fields.id), visitorQueryParam.getIntervieweeId()));
...@@ -413,39 +331,6 @@ public class VisitorServiceImpl implements VisitorService { ...@@ -413,39 +331,6 @@ public class VisitorServiceImpl implements VisitorService {
); );
} }
if (StrUtil.isNotBlank(visitorQueryParam.getIsMain())) {
//标签卡号查询
if (visitorQueryParam.getIsMain().equals("1")) {
list.add(criteriaBuilder.isNull(root.get(Visitor.Fields.mainVisitorId)));
} else {
list.add(criteriaBuilder.isNotNull(root.get(Visitor.Fields.mainVisitorId)));
}
}
// if (StrUtil.isNotBlank(visitorQueryParam.getLabelCardStatus())) {
// //标签卡状态
// list.add(
// criteriaBuilder.like(
// root.get(Visitor.Fields.labelCardStatus),
// "%" + visitorQueryParam.getLabelCardStatus() + "%"
// )
// );
// }
if (
Objects.nonNull(visitorQueryParam.getAppOfVisitTimeStart()) &&
Objects.nonNull(visitorQueryParam.getAppOfVisitTimeEnd())
) {
//预约到访时间区间段查询
list.add(
criteriaBuilder.between(
root.get(Visitor.Fields.appOfVisitTime),
visitorQueryParam.getAppOfVisitTimeStart(),
visitorQueryParam.getAppOfVisitTimeEnd()
)
);
}
if ( if (
Objects.nonNull(visitorQueryParam.getCardSendTimeStart()) && Objects.nonNull(visitorQueryParam.getCardSendTimeStart()) &&
Objects.nonNull(visitorQueryParam.getCardSendTimeEnd()) Objects.nonNull(visitorQueryParam.getCardSendTimeEnd())
......
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.app.vo.icon; package com.yiring.app.vo.icon;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import lombok.*;
import lombok.experimental.FieldDefaults;
/** /**
* @author tzl * @author tzl
...@@ -10,8 +16,33 @@ import java.io.Serializable; ...@@ -10,8 +16,33 @@ import java.io.Serializable;
* @description: * @description:
* @date 2022/5/5 15:10 * @date 2022/5/5 15:10
*/ */
@ApiModel("IconVo")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class IconVo implements Serializable { public class IconVo implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 2334297671118394950L; private static final long serialVersionUID = 2334297671118394950L;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "编号")
Long id;
@ApiModelProperty(value = "图标名称")
String iconName;
@ApiModelProperty(value = "图标类型")
String iconType;
@ApiModelProperty(value = "图标分类")
String iconSort;
@ApiModelProperty(value = "在线图标")
String iconOnline;
@ApiModelProperty(value = "离线图标")
String iconOffline;
} }
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.app.vo.visitor; package com.yiring.app.vo.visitor;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.*; import lombok.*;
import lombok.experimental.FieldDefaults; import lombok.experimental.FieldDefaults;
import org.hibernate.annotations.Comment;
/** /**
* @author tzl * @author tzl
...@@ -35,52 +38,33 @@ public class CarVo implements Serializable { ...@@ -35,52 +38,33 @@ public class CarVo implements Serializable {
@ApiModelProperty(value = "车辆类型", example = "1") @ApiModelProperty(value = "车辆类型", example = "1")
String carType; String carType;
/**
* 车辆类型翻译
*/
// @ApiModelProperty(value = "车辆类型(字典翻译)", example = "货车")
// String carTypeName;
// public String getCarTypeName() {
// if (StrUtil.isNotBlank(carType)) {
// return DictUtils.getDictLabel("car_type", carType);
// }
// return null;
// }
@ApiModelProperty(value = "标签卡", example = "DT8875666") @ApiModelProperty(value = "标签卡", example = "DT8875666")
String labelCard; String labelCard;
// /**
// * 车辆类型翻译
// */
// @ApiModelProperty(value = "标签卡状态", example = "未发卡")
// String labelCardStatusName;
// public String getLabelCardStatusName() { @Comment("司机名称")
// if (StrUtil.isNotBlank(carType)) { @ApiModelProperty(value = "司机名称", example = "张三")
// return DictUtils.getDictLabel("car_label_status", labelCardStatus); String driverName;
// }
// return null;
// }
// @ApiModelProperty(value = "单位id", example = "湖南壹润科技") @Comment("司机电话")
// String orgId; @ApiModelProperty(value = "司机电话", example = "17674741309")
// String mobile;
// @ApiModelProperty(value = "被访人id", example = "1")
// String intervieweeId; @Comment("所属公司")
// @ApiModelProperty(value = "所属公司", example = "壹润科技")
// @ApiModelProperty(value = "来访原因", example = "装货") String orgId;
// String reason;
// @ApiModelProperty(value = "被访人电话", example = "17674741309")
// @ApiModelProperty(value = "收卡时间", example = "2022-04-11 17:25:33") String intervieweeMobile;
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
// LocalDateTime cardRecTime; @Comment("被访人姓名")
@ApiModelProperty(value = "被访人姓名", example = "李四")
String intervieweeName;
// @ApiModelProperty(value = "创建时间", example = "2022-04-11 17:25:33")
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
// LocalDateTime createTime;
// //
// @ApiModelProperty(value = "发卡时间", example = "2022-04-11 17:25:33") @ApiModelProperty(value = "来访原因", example = "装货")
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") String reason;
// LocalDateTime cardSendTime;
@ApiModelProperty(value = "发卡时间", example = "2022-04-11 17:25:33")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
LocalDateTime cardSendTime;
} }
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.app.vo.visitor; package com.yiring.app.vo.visitor;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.yiring.app.domain.visitor.Car;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.time.LocalDateTime;
import lombok.*; import lombok.*;
import lombok.experimental.FieldDefaults; import lombok.experimental.FieldDefaults;
...@@ -47,103 +47,25 @@ public class VisitorDetailsVo implements Serializable { ...@@ -47,103 +47,25 @@ public class VisitorDetailsVo implements Serializable {
@ApiModelProperty(value = "是否特殊作业", example = "true") @ApiModelProperty(value = "是否特殊作业", example = "true")
boolean taskType; boolean taskType;
// @ApiModelProperty(value = "邀请人数", example = "1")
// Integer numOfVisitor;
@ApiModelProperty(value = "访客来源", example = "内部邀请") @ApiModelProperty(value = "访客来源", example = "内部邀请")
String visitorSource; String visitorSource;
@ApiModelProperty(value = "标签卡", example = "WE34421231") @ApiModelProperty(value = "标签卡", example = "WE34421231")
String labelCard; String labelCard;
// @ApiModelProperty(value = "标签卡状态", example = "使用中")
// String labelCardStatus;
@ApiModelProperty(value = "所属单位id", example = "壹润科技") @ApiModelProperty(value = "所属单位id", example = "壹润科技")
String orgId; String orgId;
// @ApiModelProperty(value = "被访人id", example = "1")
// Long intervieweeId;
@ApiModelProperty(value = "被访人姓名", example = "李四") @ApiModelProperty(value = "被访人姓名", example = "李四")
String intervieweeName; String intervieweeName;
@ApiModelProperty(value = "被访人电话", example = "李四")
String intervieweeMobile;
@ApiModelProperty(value = "来访原因", example = "来访原因") @ApiModelProperty(value = "来访原因", example = "来访原因")
String reason; String reason;
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
// @ApiModelProperty(value = "收卡时间", example = "2022-04-19 14:28:00") @ApiModelProperty(value = "发卡时间", example = "2022-04-19 14:28:00")
// LocalDateTime cardRecTime; LocalDateTime cardSendTime;
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
// @ApiModelProperty(value = "预约到访时间", example = "2022-04-19 14:28:00")
// LocalDateTime appOfVisitTime;
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
// @ApiModelProperty(value = "创建时间", example = "2022-04-19 14:28:00")
// LocalDateTime createTime;
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
// @ApiModelProperty(value = "发卡时间", example = "2022-04-19 14:28:00")
// LocalDateTime cardSendTime;
@ApiModelProperty(value = "车辆反参")
Car car;
UserVo userVo;
@ApiModelProperty(value = "主访人id")
Long mainVisitorId;
List<VisitorResultVo> list;
@ApiModel("VisitorResultVo")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public static class VisitorResultVo implements Serializable {
@Serial
private static final long serialVersionUID = 4115779013003587949L;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "id", example = "1")
Long id;
@ApiModelProperty(value = "到访人姓名", example = "张三")
String visitorName;
@ApiModelProperty(value = "到访人电话", example = "17688888888")
String visitorMobile;
@ApiModelProperty(value = "主访人id")
Long mainVisitorId;
}
@ApiModel("UserVo")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public static class UserVo implements Serializable {
@Serial
private static final long serialVersionUID = 4115779013003587949L;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "id", example = "1")
Long id;
@ApiModelProperty(value = "被访人姓名", example = "张三")
String realName;
@ApiModelProperty(value = "被访人电话", example = "17688888888")
String mobile;
@ApiModelProperty(value = "被访人部门")
String deptName;
}
} }
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.app.web.visitor; package com.yiring.app.web.visitor;
import com.yiring.app.param.visitor.CarParam;
import com.yiring.app.param.visitor.CarQueryParam; import com.yiring.app.param.visitor.CarQueryParam;
import com.yiring.app.service.visitor.CarService; import com.yiring.app.service.visitor.CarService;
import com.yiring.app.vo.visitor.CarVo; import com.yiring.app.vo.visitor.CarVo;
import com.yiring.common.core.Result; import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam; import com.yiring.common.param.IdParam;
import com.yiring.common.param.IndexParam;
import com.yiring.common.vo.PageVo; import com.yiring.common.vo.PageVo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
...@@ -37,11 +39,11 @@ public class CarController { ...@@ -37,11 +39,11 @@ public class CarController {
@Resource @Resource
CarService carService; CarService carService;
// @ApiOperation(value = "新增车辆来访信息") @ApiOperation(value = "新增车辆来访信息")
// @PostMapping("saveCarInfo") @PostMapping("saveCarInfo")
// public Result<Long> saveCarInfo(@Valid CarParam carParam) { public Result<CarVo> saveCarInfo(@Valid CarParam carParam) {
// return carService.saveCarInfo(carParam); return carService.saveCarInfo(carParam);
// } }
// @ApiOperation(value = "修改车辆来访信息") // @ApiOperation(value = "修改车辆来访信息")
// @PostMapping("updateCarInfo") // @PostMapping("updateCarInfo")
...@@ -68,11 +70,11 @@ public class CarController { ...@@ -68,11 +70,11 @@ public class CarController {
// return carService.deleteCarInfo(idParam); // return carService.deleteCarInfo(idParam);
// } // }
// @ApiOperation(value = "查看车辆来访信息详情") @ApiOperation(value = "查看车辆来访信息详情")
// @GetMapping("getCarInfo") @GetMapping("getCarInfo")
// public Result<CarVo> getCarInfo(@Valid IdParam idParam) { public Result<CarVo> getCarInfo(@Valid IndexParam indexParam) {
// return carService.getCarInfo(idParam); return carService.getCarInfo(indexParam);
// } }
@ApiOperation(value = "查看车辆来访信息(分页)") @ApiOperation(value = "查看车辆来访信息(分页)")
@GetMapping("pageCarInfo") @GetMapping("pageCarInfo")
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.web.visitor;
import com.yiring.app.param.visitor.InvitationAppQueryParam;
import com.yiring.app.param.visitor.InvitationParam;
import com.yiring.app.param.visitor.InvitationQueryParam;
import com.yiring.app.service.visitor.InvitationService;
import com.yiring.app.vo.visitor.InvitationDetailsVo;
import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam;
import com.yiring.common.vo.PageVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author tzl
* @version 1.0
* @description:
* @date 2022/4/25 11:35
*/
@Slf4j
@Validated
@Api(tags = "Invitation(邀请)")
@RestController
@RequestMapping("/invitation/")
public class InvitationController {
@Resource
InvitationService invitationService;
@ApiOperation(value = "新增邀请信息")
@PostMapping("saveInv")
public Result<String> saveInv(@Valid InvitationParam invitationParam) {
return invitationService.saveInv(invitationParam);
}
@ApiOperation(value = "修改邀请信息")
@PostMapping("updateInv")
public Result<String> updateInv(@Valid InvitationParam invitationParam, @Valid IdParam idParam) {
return invitationService.updateInv(invitationParam, idParam);
}
@ApiOperation(value = "撤回")
@PostMapping("recallInv")
public Result<String> recallInv(@Valid IdParam idParam) {
return invitationService.recallInv(idParam);
}
@ApiOperation(value = "发起邀请")
@PostMapping("sendInv")
public Result<String> sendInv(@Valid IdParam idParam) {
return invitationService.sendInv(idParam);
}
@ApiOperation(value = "删除邀请")
@PostMapping("deleteInv")
public Result<String> deleteInv(@Valid IdParam idParam) {
return invitationService.deleteInv(idParam);
}
@ApiOperation(value = "查看邀请信息(分页)")
@GetMapping("pageInv")
public Result<PageVo<InvitationDetailsVo>> pageInv(@Valid InvitationQueryParam invitationQueryParam) {
return invitationService.pageInv(invitationQueryParam);
}
@ApiOperation(value = "导出邀请信息", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
@PostMapping("exportInv")
public void exportInv(HttpServletResponse response, @Valid InvitationQueryParam invitationQueryParam) {
invitationService.exportInv(invitationQueryParam, response);
}
@ApiOperation(value = "小程序查看邀请详情")
@GetMapping("detailsInv")
public Result<InvitationDetailsVo> detailsInv(@Valid IdParam idParam) {
return invitationService.detailsInv(idParam);
}
@ApiOperation(value = "小程序查看邀请")
@GetMapping("appGetInv")
public Result<PageVo<InvitationDetailsVo>> appGetInv(@Valid InvitationAppQueryParam invitationAppQueryParam) {
return invitationService.findAllByVisitor_VisitorMobileAndVisitor_Deleted(invitationAppQueryParam);
}
}
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.app.web.visitor; package com.yiring.app.web.visitor;
import com.yiring.app.param.visitor.VisitorAppQueryParam;
import com.yiring.app.param.visitor.VisitorParam; import com.yiring.app.param.visitor.VisitorParam;
import com.yiring.app.param.visitor.VisitorQueryParam; import com.yiring.app.param.visitor.VisitorQueryParam;
import com.yiring.app.service.visitor.VisitorService; import com.yiring.app.service.visitor.VisitorService;
import com.yiring.app.vo.visitor.VisitorAppVo;
import com.yiring.app.vo.visitor.VisitorDetailsVo; import com.yiring.app.vo.visitor.VisitorDetailsVo;
import com.yiring.app.vo.visitor.VisitorVo; import com.yiring.app.vo.visitor.VisitorVo;
import com.yiring.common.core.Result; import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam; import com.yiring.common.param.IndexParam;
import com.yiring.common.vo.PageVo; import com.yiring.common.vo.PageVo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
...@@ -41,39 +38,14 @@ public class VisitorController { ...@@ -41,39 +38,14 @@ public class VisitorController {
@ApiOperation(value = "新增访客信息") @ApiOperation(value = "新增访客信息")
@PostMapping("saveVisitor") @PostMapping("saveVisitor")
public Result<String> saveVisitor(@Valid VisitorParam visitorParam) { public Result<VisitorDetailsVo> saveVisitor(@Valid VisitorParam visitorParam) {
return visitorService.saveVisitor(visitorParam); return visitorService.saveVisitor(visitorParam);
} }
@ApiOperation(value = "修改访客信息")
@PostMapping("updateVisitor")
public Result<String> updateVisitor(@Valid VisitorParam visitorParam, @Valid IdParam idParam) {
return visitorService.updateVisitor(visitorParam, idParam);
}
@ApiOperation(value = "收卡")
@PostMapping("cardRec")
public Result<String> cardRec(@Valid IdParam idParam) {
return visitorService.cardRec(idParam);
}
@ApiOperation(value = "发卡")
@ApiImplicitParam(value = "标签卡", example = "DW8544568", required = true, name = "labelCard")
@PostMapping("cardSend")
public Result<String> cardSend(@Valid IdParam idParam, String labelCard) {
return visitorService.cardSend(labelCard, idParam);
}
// @ApiOperation(value = "删除访客信息")
// @PostMapping("deleteVisitor")
// public Result<String> deleteVisitor(@Valid IdParam idParam) {
// return visitorService.deleteVisitor(idParam);
// }
@ApiOperation(value = "查看访客信息详情") @ApiOperation(value = "查看访客信息详情")
@GetMapping("selectVisitor") @GetMapping("selectVisitor")
public Result<VisitorDetailsVo> selectVisitor(@Valid IdParam idParam) { public Result<VisitorDetailsVo> selectVisitor(@Valid IndexParam indexParam) {
return visitorService.selectVisitor(idParam); return visitorService.selectVisitor(indexParam);
} }
@ApiOperation(value = "查看访客信息(分页)") @ApiOperation(value = "查看访客信息(分页)")
...@@ -87,10 +59,4 @@ public class VisitorController { ...@@ -87,10 +59,4 @@ public class VisitorController {
public void exportVisitor(HttpServletResponse response, @Valid VisitorQueryParam visitorQueryParam) { public void exportVisitor(HttpServletResponse response, @Valid VisitorQueryParam visitorQueryParam) {
visitorService.exportVisitor(visitorQueryParam, response); visitorService.exportVisitor(visitorQueryParam, response);
} }
@ApiOperation(value = "小程序查看来访历史(分页)")
@GetMapping("selectInfo")
public Result<PageVo<VisitorAppVo>> selectInfo(@Valid VisitorAppQueryParam visitorAppQueryParam) {
return visitorService.selectInfo(visitorAppQueryParam);
}
} }
...@@ -36,6 +36,10 @@ public class SaTokenConfigure implements WebMvcConfigurer { ...@@ -36,6 +36,10 @@ public class SaTokenConfigure implements WebMvcConfigurer {
.notMatch("/hello/**") .notMatch("/hello/**")
// 授权相关接口(登录、登出、注册等) // 授权相关接口(登录、登出、注册等)
.notMatch("/auth/**") .notMatch("/auth/**")
.notMatch("/visitor/saveVisitor")
.notMatch("/visitor/selectVisitor")
.notMatch("/Car/saveCarInfo")
.notMatch("/Car/getCarInfo")
.notMatch("/favicon.ico", "/**/*.html", "/**/*.js", "/**/*.css") .notMatch("/favicon.ico", "/**/*.html", "/**/*.js", "/**/*.css")
.notMatch("/v2/api-docs", "/v3/api-docs", "/swagger-resources/**") .notMatch("/v2/api-docs", "/v3/api-docs", "/swagger-resources/**")
.check(r -> StpUtil.checkLogin()); .check(r -> StpUtil.checkLogin());
......
...@@ -20,6 +20,9 @@ public class RegEx { ...@@ -20,6 +20,9 @@ public class RegEx {
public static final String MOBILE = public static final String MOBILE =
"^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(16[5,6])|(17[0-8])|(18[0-9])|(19[1、5、8、9]))\\d{8}$"; "^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(16[5,6])|(17[0-8])|(18[0-9])|(19[1、5、8、9]))\\d{8}$";
//身份证验证
public static final String CARDNO =
"^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$";
/** /**
* 报警规则的时间格式 * 报警规则的时间格式
*/ */
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论