This commit is contained in:
dzc committed 2025-04-18 14:35:11 +08:00
commit 35f91617ca
21 files changed
+100 -965

No files matched your search

@@ -1,7 +1,10 @@
package com.bsd.pjcloud.canteen.mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bsd.pjcloud.canteen.dto.app.DailyMenuDTO;
import com.bsd.pjcloud.canteen.vo.ADCanteenDailyMenuListVO;
import com.bsd.pjcloud.canteen.vo.DailyMenuVO;
import com.bsd.pjcloud.canteen.vo.app.DailyMenuAppVO;
import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper;
import com.bsd.pjcloud.canteen.entity.CanteenDailyMenuEntity;
@@ -27,4 +30,8 @@ public interface CanteenDailyMenuMapper extends PjcloudBaseMapper<CanteenDailyMe
*/
List<ADCanteenDailyMenuListVO> getCanteenMenuList(@Param("day") String day, @Param("hourType") Integer hourType,
@Param("categoryId") Long categoryId, @Param("merchantId") Long merchantId,DataScope dataScope);
Page<DailyMenuAppVO> selectTimeFoodPage(@Param("page")Page page, DailyMenuDTO dailyMenuDTO);
}
@@ -143,58 +143,65 @@ public class CanteenDailyMenuServiceImpl extends ServiceImpl<CanteenDailyMenuMap
@Override
public Page selectTimeFoodPage(Page page, DailyMenuDTO dailyMenuDTO) {
LambdaQueryWrapper<CanteenDailyMenuEntity> canteenDailyMenuEntityLambdaQueryWrapper = new LambdaQueryWrapper<>();
canteenDailyMenuEntityLambdaQueryWrapper.eq(CanteenDailyMenuEntity::getMerchantId, dailyMenuDTO.getMerchantId());
canteenDailyMenuEntityLambdaQueryWrapper.eq(CanteenDailyMenuEntity::getStartTime, dailyMenuDTO.getStartTime());
canteenDailyMenuEntityLambdaQueryWrapper.eq(dailyMenuDTO.getHourType() != null,
CanteenDailyMenuEntity::getHourType, dailyMenuDTO.getHourType());
// LambdaQueryWrapper<CanteenDailyMenuEntity> canteenDailyMenuEntityLambdaQueryWrapper = new LambdaQueryWrapper<>();
// canteenDailyMenuEntityLambdaQueryWrapper.eq(CanteenDailyMenuEntity::getMerchantId, dailyMenuDTO.getMerchantId());
// canteenDailyMenuEntityLambdaQueryWrapper.eq(CanteenDailyMenuEntity::getStartTime, dailyMenuDTO.getStartTime());
// canteenDailyMenuEntityLambdaQueryWrapper.eq(dailyMenuDTO.getHourType() != null,
// CanteenDailyMenuEntity::getHourType, dailyMenuDTO.getHourType());
//
// //查询
// LambdaQueryWrapper<CanteenSpuEntity> onlineFoodSpuDOLambdaQueryWrapper = new LambdaQueryWrapper<>();
// onlineFoodSpuDOLambdaQueryWrapper.eq(null != dailyMenuDTO.getCategoryId(), CanteenSpuEntity::getCategoryId, dailyMenuDTO.getCategoryId());
// onlineFoodSpuDOLambdaQueryWrapper.eq(CanteenSpuEntity::getIsShow, "1");
// List<CanteenSpuEntity> spuEntities = canteenSpuService.list(onlineFoodSpuDOLambdaQueryWrapper);
//
// if (CollectionUtils.isNotEmpty(spuEntities)){
// List<Long> spuIds = spuEntities.stream().map(CanteenSpuEntity::getId).collect(Collectors.toList());
// canteenDailyMenuEntityLambdaQueryWrapper.notIn(CanteenDailyMenuEntity::getSpuId, spuIds);
// }
//
// Page pageData = baseMapper.selectPage(page, canteenDailyMenuEntityLambdaQueryWrapper);
// List<CanteenDailyMenuEntity> canteenDailyMenuEntities = pageData.getRecords();
// if (CollectionUtils.isNotEmpty(canteenDailyMenuEntities)) {
// List<Long> spuIds = canteenDailyMenuEntities.stream().map(CanteenDailyMenuEntity::getSpuId).distinct().collect(Collectors.toList());
// LambdaQueryWrapper<CanteenSpuEntity> spuDOLambdaQueryWrapper = new LambdaQueryWrapper<>();
// onlineFoodSpuDOLambdaQueryWrapper.in(CanteenSpuEntity::getId, spuIds);
// List<CanteenSpuEntity> list = canteenSpuService.list(spuDOLambdaQueryWrapper);
// // 按 id 分组成 Map
// Map<Long, CanteenSpuEntity> spuEntityMap = list.stream()
// .collect(Collectors.toMap(CanteenSpuEntity::getId, spu -> spu));
// // 构造新的 VO 列表
// List<DailyMenuAppVO> dailyMenuVOList = canteenDailyMenuEntities.stream()
// .map(menu -> {
// DailyMenuAppVO vo = new DailyMenuAppVO();
// BeanUtils.copyProperties(menu, vo); // 拷贝通用属性
// CanteenSpuEntity spuEntity = spuEntityMap.get(menu.getSpuId());
// if (spuEntity != null) {
// vo.setSpuId(spuEntity.getId());
// vo.setStock(spuEntity.getStock());
// vo.setPrice(spuEntity.getPrice());
// vo.setPicUrl(spuEntity.getPicUrl());
// vo.setName(spuEntity.getName());
// vo.setSort(spuEntity.getSort());
// vo.setIsShow(spuEntity.getIsShow());
// // 其他需要的字段
// }
// return vo;
// })
// .collect(Collectors.toList());
//// dailyMenuVOList.sort(Comparator.comparing(DailyMenuAppVO::getSort));
// // 修改排序逻辑,处理null值情况
// dailyMenuVOList.sort(Comparator.comparing(
// DailyMenuAppVO::getSort,
// Comparator.nullsFirst(Comparator.naturalOrder())
// ));
// pageData.setRecords(dailyMenuVOList);
//查询
LambdaQueryWrapper<CanteenSpuEntity> onlineFoodSpuDOLambdaQueryWrapper = new LambdaQueryWrapper<>();
onlineFoodSpuDOLambdaQueryWrapper.eq(null != dailyMenuDTO.getCategoryId(), CanteenSpuEntity::getCategoryId, dailyMenuDTO.getCategoryId());
onlineFoodSpuDOLambdaQueryWrapper.eq(CanteenSpuEntity::getIsShow, "1");
List<CanteenSpuEntity> spuEntities = canteenSpuService.list(onlineFoodSpuDOLambdaQueryWrapper);
if (CollectionUtils.isNotEmpty(spuEntities)){
List<Long> spuIds = spuEntities.stream().map(CanteenSpuEntity::getId).collect(Collectors.toList());
canteenDailyMenuEntityLambdaQueryWrapper.notIn(CanteenDailyMenuEntity::getSpuId, spuIds);
}
Page pageData = baseMapper.selectPage(page, canteenDailyMenuEntityLambdaQueryWrapper);
List<CanteenDailyMenuEntity> canteenDailyMenuEntities = pageData.getRecords();
if (CollectionUtils.isNotEmpty(canteenDailyMenuEntities)) {
List<Long> spuIds = canteenDailyMenuEntities.stream().map(CanteenDailyMenuEntity::getSpuId).distinct().collect(Collectors.toList());
LambdaQueryWrapper<CanteenSpuEntity> spuDOLambdaQueryWrapper = new LambdaQueryWrapper<>();
onlineFoodSpuDOLambdaQueryWrapper.in(CanteenSpuEntity::getId, spuIds);
List<CanteenSpuEntity> list = canteenSpuService.list(spuDOLambdaQueryWrapper);
// 按 id 分组成 Map
Map<Long, CanteenSpuEntity> spuEntityMap = list.stream()
.collect(Collectors.toMap(CanteenSpuEntity::getId, spu -> spu));
// 构造新的 VO 列表
List<DailyMenuAppVO> dailyMenuVOList = canteenDailyMenuEntities.stream()
.map(menu -> {
DailyMenuAppVO vo = new DailyMenuAppVO();
BeanUtils.copyProperties(menu, vo); // 拷贝通用属性
CanteenSpuEntity spuEntity = spuEntityMap.get(menu.getSpuId());
if (spuEntity != null) {
vo.setSpuId(spuEntity.getId());
vo.setStock(spuEntity.getStock());
vo.setPrice(spuEntity.getPrice());
vo.setPicUrl(spuEntity.getPicUrl());
vo.setName(spuEntity.getName());
vo.setSort(spuEntity.getSort());
vo.setIsShow(spuEntity.getIsShow());
// 其他需要的字段
}
return vo;
})
.collect(Collectors.toList());
dailyMenuVOList.sort(Comparator.comparing(DailyMenuAppVO::getSort));
pageData.setRecords(dailyMenuVOList);
Page<DailyMenuAppVO> pageData=baseMapper.selectTimeFoodPage(page,dailyMenuDTO);
return pageData;
}
// }
return null;
// return null;
}
// 发送mq消息
@@ -82,4 +82,35 @@
</if>
</where>
</select>
<select id="selectTimeFoodPage" resultType="com.bsd.pjcloud.canteen.vo.app.DailyMenuAppVO" parameterType="com.bsd.pjcloud.canteen.dto.app.DailyMenuDTO">
SELECT m.id,
m.hour_type,
s.id as spu_id,
s.`name`,
s.price,
s.stock,
s.pic_url,
s.sort,
s.is_show,
c.id as category_id
FROM `canteen_daily_menu` m
left JOIN canteen_spu s
on m.spu_id = s.id
LEFT JOIN canteen_category c
on s.category_id = c.id
<where>
m.del_flag = 0 and s.del_flag = 0 and m.merchant_id = #{dailyMenuDTO.merchantId} and s.is_show = 0
<if test="dailyMenuDTO.startTime != null">
AND m.start_time = #{dailyMenuDTO.startTime}
</if>
<if test="dailyMenuDTO.categoryId != null">
AND s.category_id = #{dailyMenuDTO.categoryId}
</if>
<if test="dailyMenuDTO.hourType != null">
AND m.hour_type = #{dailyMenuDTO.hourType}
</if>
</where>
order by s.sort asc
</select>
</mapper>
@@ -1,22 +0,0 @@
package com.bsd.pjcloud.integrated.constant;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 出库入口
*/
@AllArgsConstructor
@Getter
public enum VisitorTypeEnum {
FKSQ("1", "访客申请"),
ZDYQ("2", "主动邀请"),
HTXZ("3", "后台新增")
;
private final String type;
private final String description;
}
@@ -1,94 +0,0 @@
package com.bsd.pjcloud.integrated.dto.visitors.app;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
/**
* 访客表
*
* @author zjf
* @date 2025-04-09 15:22:47
*/
@Data
@Schema(description = "app访客dto")
public class VisitorsAppDTO {
/**
* 姓名
*/
@Schema(description="姓名")
@NotNull
private String name;
/**
* 手机号
*/
@NotNull
@Schema(description="手机号")
private String mobile;
/**
* 身份证号
*/
@Schema(description="身份证号")
private String idCard;
/**
* 描述
*/
@Schema(description="描述")
private String description;
/**
* 到访单位
*/
@Schema(description="到访单位")
private Long deptId;
/**
* 接待人
*/
@Schema(description="接待人")
private String userName;
/**
* 公司名称
*/
@Schema(description="公司名称")
private String companyName;
/**
* 随行人员数量
*/
@Schema(description="随行人员数量")
private Integer peopleNumber;
/**
* 到访时间
*/
@Schema(description="到访时间")
private LocalDateTime vStartDate;
/**
* 到访时间
*/
@Schema(description="到访时间")
private LocalDateTime vEndDate;
/**
* 是否驾驶车辆0 否 1是
*/
@Schema(description="是否驾驶车辆0 否 1是")
private String isDrive;
@Schema(description="车牌号集合")
private List<VisitorsCarAppDTO> visitorsCarAppDTOList;
}
@@ -1,28 +0,0 @@
package com.bsd.pjcloud.integrated.dto.visitors.app;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 车牌号
*
* @author zjf
* @date 2025-04-09 15:10:54
*/
@Data
@Schema(description = "车牌号")
public class VisitorsCarAppDTO {
/**
* 车牌号
*/
@Schema(description="车牌号")
private String carNumber;
}
@@ -1,129 +0,0 @@
package com.bsd.pjcloud.integrated.vo.app.visitor;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.bsd.pjcloud.common.core.util.TenantTable;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
import java.util.List;
/**
* 访客表
*
* @author zjf
* @date 2025-04-09 15:22:47
*/
@Data
@Schema(description = "访客表vo")
public class VisitorsAppVo{
/**
* id
*/
@Schema(description="id")
private Long id;
/**
* 姓名
*/
@Schema(description="姓名")
private String name;
/**
* 手机号
*/
@Schema(description="手机号")
private String mobile;
/**
* 身份证号
*/
@Schema(description="身份证号")
private String idCard;
/**
* 描述
*/
@Schema(description="描述")
private String description;
/**
* 审核状态
*/
@Schema(description="审核状态")
private String checkStatus;
/**
* 到访单位
*/
@Schema(description="到访单位")
private Long deptId;
/**
* 接待人
*/
@Schema(description="接待人")
private Long userName;
/**
* 车牌号id
*/
@Schema(description="车牌号id")
private Long carId;
/**
* 公司名称
*/
@Schema(description="公司名称")
private String companyName;
/**
* 随行人员数量
*/
@Schema(description="随行人员数量")
private Integer peopleNumber;
/**
* 到访时间
*/
@Schema(description="到访时间")
private LocalDateTime vStartDate;
/**
* 到访时间
*/
@Schema(description="到访时间")
private LocalDateTime vEndDate;
/**
* 是否驾驶车辆0 否 1是
*/
@Schema(description="是否驾驶车辆0 否 1是")
private String isDrive;
/**
* 审核原因
*/
@Schema(description="审核原因")
private String checkReason;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
@Schema(description="创建时间")
private LocalDateTime createTime;
@Schema(description="token")
private String token;
@Schema(description="车牌号")
private List<VisitorsCarAppVo> visitorsCarAppVos;
}
@@ -1,27 +0,0 @@
package com.bsd.pjcloud.integrated.vo.app.visitor;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* 车牌号
*
* @author zjf
* @date 2025-04-09 15:10:54
*/
@Data
@Schema(description = "车牌号")
public class VisitorsCarAppVo {
private Long id;
/**
* 车牌号
*/
@Schema(description="车牌号")
private String carNumber;
}
@@ -1,119 +0,0 @@
package com.bsd.pjcloud.integrated.controller;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.log.annotation.SysLog;
import com.bsd.pjcloud.integrated.entity.VisitorsCarEntity;
import com.bsd.pjcloud.integrated.service.VisitorsCarService;
import org.springframework.security.access.prepost.PreAuthorize;
import com.bsd.pjcloud.common.excel.annotation.ResponseExcel;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.http.HttpHeaders;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Objects;
/**
* 车牌号
*
* @author zjf
* @date 2025-04-09 15:10:54
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/visitorsCar" )
@Tag(description = "visitorsCar" , name = "车牌号管理" )
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
public class VisitorsCarController {
private final VisitorsCarService visitorsCarService;
/**
* 分页查询
* @param page 分页对象
* @param visitorsCar 车牌号
* @return
*/
@Operation(summary = "分页查询" , description = "分页查询" )
@GetMapping("/page" )
@PreAuthorize("@pms.hasPermission('integrated_visitorsCar_view')" )
public R getVisitorsCarPage(@ParameterObject Page page, @ParameterObject VisitorsCarEntity visitorsCar) {
LambdaQueryWrapper<VisitorsCarEntity> wrapper = Wrappers.lambdaQuery();
return R.ok(visitorsCarService.page(page, wrapper));
}
/**
* 通过id查询车牌号
* @param id id
* @return R
*/
@Operation(summary = "通过id查询" , description = "通过id查询" )
@GetMapping("/{id}" )
@PreAuthorize("@pms.hasPermission('integrated_visitorsCar_view')" )
public R getById(@PathVariable("id" ) Long id) {
return R.ok(visitorsCarService.getById(id));
}
/**
* 新增车牌号
* @param visitorsCar 车牌号
* @return R
*/
@Operation(summary = "新增车牌号" , description = "新增车牌号" )
@SysLog("新增车牌号" )
@PostMapping
@PreAuthorize("@pms.hasPermission('integrated_visitorsCar_add')" )
public R save(@RequestBody VisitorsCarEntity visitorsCar) {
return R.ok(visitorsCarService.save(visitorsCar));
}
/**
* 修改车牌号
* @param visitorsCar 车牌号
* @return R
*/
@Operation(summary = "修改车牌号" , description = "修改车牌号" )
@SysLog("修改车牌号" )
@PutMapping
@PreAuthorize("@pms.hasPermission('integrated_visitorsCar_edit')" )
public R updateById(@RequestBody VisitorsCarEntity visitorsCar) {
return R.ok(visitorsCarService.updateById(visitorsCar));
}
/**
* 通过id删除车牌号
* @param ids id列表
* @return R
*/
@Operation(summary = "通过id删除车牌号" , description = "通过id删除车牌号" )
@SysLog("通过id删除车牌号" )
@DeleteMapping
@PreAuthorize("@pms.hasPermission('integrated_visitorsCar_del')" )
public R removeById(@RequestBody Long[] ids) {
return R.ok(visitorsCarService.removeBatchByIds(CollUtil.toList(ids)));
}
/**
* 导出excel 表格
* @param visitorsCar 查询条件
* @param ids 导出指定ID
* @return excel 文件流
*/
@ResponseExcel
@GetMapping("/export")
@PreAuthorize("@pms.hasPermission('integrated_visitorsCar_export')" )
public List<VisitorsCarEntity> export(VisitorsCarEntity visitorsCar,Long[] ids) {
return visitorsCarService.list(Wrappers.lambdaQuery(visitorsCar).in(ArrayUtil.isNotEmpty(ids), VisitorsCarEntity::getId, ids));
}
}
@@ -1,206 +0,0 @@
package com.bsd.pjcloud.integrated.controller;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bsd.pjcloud.common.core.util.BeanUtils;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.idempotent.annotation.Idempotent;
import com.bsd.pjcloud.common.log.annotation.SysLog;
import com.bsd.pjcloud.common.security.annotation.Inner;
import com.bsd.pjcloud.flow.task.constant.TaskCheckStatusEnum;
import com.bsd.pjcloud.integrated.dto.visitors.app.VisitorsAppDTO;
import com.bsd.pjcloud.integrated.entity.VisitorsEntity;
import com.bsd.pjcloud.integrated.service.VisitorsService;
import com.bsd.pjcloud.integrated.vo.app.visitor.VisitorsAppVo;
import org.springframework.security.access.prepost.PreAuthorize;
import com.bsd.pjcloud.common.excel.annotation.ResponseExcel;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.http.HttpHeaders;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.List;
/**
* 访客表
*
* @author zjf
* @date 2025-04-09 15:22:47
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/visitors" )
@Tag(description = "visitors" , name = "访客表管理" )
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
public class VisitorsController {
private final VisitorsService visitorsService;
/**
* 分页查询
* @param page 分页对象
* @param visitors 访客表
* @return
*/
@Operation(summary = "分页查询" , description = "分页查询" )
@GetMapping("/page" )
@PreAuthorize("@pms.hasPermission('integrated_visitors_view')" )
public R getVisitorsPage(@ParameterObject Page page, @ParameterObject VisitorsEntity visitors) {
LambdaQueryWrapper<VisitorsEntity> wrapper = Wrappers.lambdaQuery();
wrapper.eq(StrUtil.isNotBlank(visitors.getName()),VisitorsEntity::getName,visitors.getName());
wrapper.eq(StrUtil.isNotBlank(visitors.getMobile()),VisitorsEntity::getMobile,visitors.getMobile());
return R.ok(visitorsService.page(page, wrapper));
}
/**
* 通过id查询访客表
* @param id id
* @return R
*/
@Operation(summary = "通过id查询" , description = "通过id查询" )
@GetMapping("/{id}" )
@PreAuthorize("@pms.hasPermission('integrated_visitors_view')" )
public R getById(@PathVariable("id" ) Long id) {
return R.ok(visitorsService.getById(id));
}
/**
* 新增访客表
* @param visitors 访客表
* @return R
*/
@Operation(summary = "新增访客表" , description = "新增访客表" )
@SysLog("新增访客表" )
@PostMapping
@PreAuthorize("@pms.hasPermission('integrated_visitors_add')" )
public R save(@RequestBody VisitorsEntity visitors) {
return R.ok(visitorsService.save(visitors));
}
/**
* 修改访客表
* @param visitors 访客表
* @return R
*/
@Operation(summary = "修改访客表" , description = "修改访客表" )
@SysLog("修改访客表" )
@PutMapping
@PreAuthorize("@pms.hasPermission('integrated_visitors_edit')" )
public R updateById(@RequestBody VisitorsEntity visitors) {
return R.ok(visitorsService.updateById(visitors));
}
/**
* 通过id删除访客表
* @param ids id列表
* @return R
*/
@Operation(summary = "通过id删除访客表" , description = "通过id删除访客表" )
@SysLog("通过id删除访客表" )
@DeleteMapping
@PreAuthorize("@pms.hasPermission('integrated_visitors_del')" )
public R removeById(@RequestBody Long[] ids) {
return R.ok(visitorsService.removeBatchByIds(CollUtil.toList(ids)));
}
/**
* 导出excel 表格
* @param visitors 查询条件
* @param ids 导出指定ID
* @return excel 文件流
*/
@ResponseExcel
@GetMapping("/export")
@PreAuthorize("@pms.hasPermission('integrated_visitors_export')" )
public List<VisitorsEntity> export(VisitorsEntity visitors,Long[] ids) {
return visitorsService.list(Wrappers.lambdaQuery(visitors).in(ArrayUtil.isNotEmpty(ids), VisitorsEntity::getId, ids));
}
//-----------------------APP----------------------------
/**
* 新增访客表
* @param visitors 访客表
* @return R
*/
@Operation(summary = "app新增访客" , description = "app新增访客" )
@SysLog("新增访客" )
@PostMapping("/app/save")
@Idempotent(key = "#mobile", expireTime = 10, info = "请勿重复提交")
@Inner(value = false)
public R saveFK(@RequestBody VisitorsAppDTO visitors) {
return R.ok(visitorsService.vistorsSave(visitors));
}
/**
* 根据token查询预约的信息
* 通过token查询访客表
* @param
* @return R
*/
@Operation(summary = "通过token查询" , description = "通过token查询" )
@GetMapping("/app/get/{token}" )
public R<VisitorsAppVo> getByToken(@PathVariable("token" ) String token) {
return R.ok(visitorsService.getByToken(token));
}
/**
* 扫码发送请求确认是否能通过
* 通过token查询访客表
* @param
* @return R
*/
@Operation(summary = "通过token查询" , description = "通过token查询" )
@GetMapping("/app/check/{token}" )
public R checkByToken(@PathVariable("token" ) String token) {
LambdaQueryWrapper<VisitorsEntity> visitorsEntityLambdaQueryWrapper = new LambdaQueryWrapper<>();
visitorsEntityLambdaQueryWrapper.eq(VisitorsEntity::getToken,token);
visitorsEntityLambdaQueryWrapper.eq(VisitorsEntity::getCheckStatus, TaskCheckStatusEnum.RESULT);
VisitorsEntity visitors = visitorsService.getOne(visitorsEntityLambdaQueryWrapper);
if (visitors == null){
return R.failed("没有此预约信息");
}
LocalDateTime vStartDate = visitors.getVStartDate();
if (vStartDate.isBefore(LocalDateTime.now())){
return R.failed("预约时间未到");
}
LocalDateTime vEndDate = visitors.getVEndDate();
if (vEndDate.isBefore(LocalDateTime.now())){
return R.failed("预约已过期");
}
return R.ok(true);
}
/**
* 新增拜访
* @param visitors 访客表
* @return R
*/
@Operation(summary = "app新增拜访" , description = "app新增拜访" )
@SysLog("新增拜访" )
@PostMapping("/app/saveBF")
@Idempotent(key = "#mobile", expireTime = 10, info = "请勿重复提交")
public R saveBF(@RequestBody VisitorsAppDTO visitors) {
return R.ok(visitorsService.vistorsBFSave(visitors));
}
@GetMapping("/app/pageBF")
@SysLog("获取我的邀约记录" )
public R getPageBF(@ParameterObject Page page, @ParameterObject VisitorsEntity visitors) {
return R.ok( visitorsService.getPageBF(page, visitors));
}
}
@@ -171,4 +171,8 @@ public class VisitorsEntity extends Model<VisitorsEntity> {
@Schema(description="用户id")
private Long userId;
@Schema(description="是否随行人员")
private String isOtherPeople;
}
@@ -1,11 +0,0 @@
package com.bsd.pjcloud.integrated.mapper;
import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper;
import com.bsd.pjcloud.integrated.entity.VisitorsCarEntity;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface VisitorsCarMapper extends PjcloudBaseMapper<VisitorsCarEntity> {
}
@@ -1,11 +0,0 @@
package com.bsd.pjcloud.integrated.mapper;
import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper;
import com.bsd.pjcloud.integrated.entity.VisitorsEntity;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface VisitorsMapper extends PjcloudBaseMapper<VisitorsEntity> {
}
@@ -1,8 +0,0 @@
package com.bsd.pjcloud.integrated.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bsd.pjcloud.integrated.entity.VisitorsCarEntity;
public interface VisitorsCarService extends IService<VisitorsCarEntity> {
}
@@ -1,38 +0,0 @@
package com.bsd.pjcloud.integrated.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bsd.pjcloud.integrated.dto.visitors.app.VisitorsAppDTO;
import com.bsd.pjcloud.integrated.entity.VisitorsEntity;
import com.bsd.pjcloud.integrated.vo.app.visitor.VisitorsAppVo;
public interface VisitorsService extends IService<VisitorsEntity> {
/**
* 移动端发起访客新增
* @param visitors
* @return
*/
Object vistorsSave(VisitorsAppDTO visitors);
/**
* 根据token查询访客信息
* @param token
* @return
*/
VisitorsAppVo getByToken(String token);
/**
* 移动端发起拜访
* @param visitors
* @return
*/
Object vistorsBFSave(VisitorsAppDTO visitors);
Object getPageBF(Page page, VisitorsEntity visitors);
}
@@ -1,16 +0,0 @@
package com.bsd.pjcloud.integrated.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bsd.pjcloud.integrated.entity.VisitorsCarEntity;
import com.bsd.pjcloud.integrated.mapper.VisitorsCarMapper;
import com.bsd.pjcloud.integrated.service.VisitorsCarService;
import org.springframework.stereotype.Service;
/**
* 车牌号
*
* @author zjf
* @date 2025-04-09 15:10:54
*/
@Service
public class VisitorsCarServiceImpl extends ServiceImpl<VisitorsCarMapper, VisitorsCarEntity> implements VisitorsCarService {
}
@@ -1,160 +0,0 @@
package com.bsd.pjcloud.integrated.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bsd.pjcloud.admin.api.feign.RemoteUserService;
import com.bsd.pjcloud.common.core.exception.ServiceException;
import com.bsd.pjcloud.common.core.util.BeanUtils;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.common.security.util.SecurityUtils;
import com.bsd.pjcloud.flow.task.api.feign.RemoteFlowApiFlowService;
import com.bsd.pjcloud.flow.task.constant.TaskCheckStatusEnum;
import com.bsd.pjcloud.flow.task.dto.ProcessInstanceParamDto;
import com.bsd.pjcloud.flow.task.entity.Process;
import com.bsd.pjcloud.integrated.constant.IntegratedFlowConstant;
import com.bsd.pjcloud.integrated.constant.VisitorTypeEnum;
import com.bsd.pjcloud.integrated.dto.visitors.app.VisitorsAppDTO;
import com.bsd.pjcloud.integrated.dto.visitors.app.VisitorsCarAppDTO;
import com.bsd.pjcloud.integrated.entity.VisitorsCarEntity;
import com.bsd.pjcloud.integrated.entity.VisitorsEntity;
import com.bsd.pjcloud.integrated.mapper.VisitorsCarMapper;
import com.bsd.pjcloud.integrated.mapper.VisitorsMapper;
import com.bsd.pjcloud.integrated.service.VisitorsService;
import com.bsd.pjcloud.integrated.vo.app.visitor.VisitorsAppVo;
import com.bsd.pjcloud.integrated.vo.app.visitor.VisitorsCarAppVo;
import lombok.AllArgsConstructor;
import org.springframework.security.oauth2.jwt.Jwt;
import org.springframework.security.oauth2.jwt.JwtClaimsSet;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.time.LocalDateTime;
import java.util.List;
import java.util.UUID;
/**
* 访客表
*
* @author zjf
* @date 2025-04-09 15:22:47
*/
@Service
@AllArgsConstructor
public class VisitorsServiceImpl extends ServiceImpl<VisitorsMapper, VisitorsEntity> implements VisitorsService {
private final VisitorsCarMapper visitorsCarMapper;
private final RemoteUserService remoteUserService;
private final RemoteFlowApiFlowService remoteFlowApiFlowService;
@Override
@Transactional
public Object vistorsSave(VisitorsAppDTO visitors) {
//发起流程
R<Process> processR = remoteFlowApiFlowService.getProcessByBusinessKey(IntegratedFlowConstant.INTEGRATED_VISITOR);
if (!processR.isOk() || processR.getData() == null) {
throw new ServiceException("流程配置获取失败: " + processR.getMsg());
}
String flowId = processR.getData().getFlowId();
ProcessInstanceParamDto processInstanceParamDto = new ProcessInstanceParamDto();
processInstanceParamDto.setFlowId(flowId);
R<String> stringR = remoteFlowApiFlowService.startProcessInstance(processInstanceParamDto);
if (!stringR.isOk() || stringR.getData() == null) {
throw new ServiceException("流程实例启动失败: " + stringR.getMsg());
}
String processInstanceId = stringR.getData();
VisitorsEntity bean = BeanUtils.toBean(visitors, VisitorsEntity.class);
bean.setType(VisitorTypeEnum.FKSQ.getType());
bean.setProcessInstanceId(processInstanceId);
bean.setCheckStatus(TaskCheckStatusEnum.PADDING.getCode());
String uniqueToken = UUID.randomUUID().toString();
String token = uniqueToken.replace("-", "");
bean.setToken(token);
int insert = baseMapper.insert(bean);
List<VisitorsCarAppDTO> visitorsCarAppDTOList = visitors.getVisitorsCarAppDTOList();
if (!CollectionUtils.isEmpty(visitorsCarAppDTOList)){
List<VisitorsCarEntity> visitorsCarEntities = BeanUtils.toBean(visitorsCarAppDTOList, VisitorsCarEntity.class);
visitorsCarEntities.forEach(i->{
i.setVisitorsId(bean.getId());
});
visitorsCarMapper.insert(visitorsCarEntities);
}
// VisitorsAppVo visitorAppVo = BeanUtils.toBean(bean, VisitorsAppVo.class);
// List<VisitorsCarAppVo> visitorsCarAppVos = BeanUtils.toBean(visitorsCarAppDTOList, VisitorsCarAppVo.class);
// visitorAppVo.setVisitorsCarAppVos(visitorsCarAppVos);
return insert;
}
@Override
public VisitorsAppVo getByToken(String token) {
LambdaQueryWrapper<VisitorsEntity> visitorsEntityLambdaQueryWrapper = new LambdaQueryWrapper<>();
visitorsEntityLambdaQueryWrapper.eq(VisitorsEntity::getToken,token);
VisitorsEntity visitors = baseMapper.selectOne(visitorsEntityLambdaQueryWrapper);
VisitorsAppVo bean = BeanUtils.toBean(visitors, VisitorsAppVo.class);
List<VisitorsCarEntity> visitorsCarEntities =
visitorsCarMapper.selectList(new LambdaQueryWrapper<VisitorsCarEntity>().eq(VisitorsCarEntity::getVisitorsId, visitors.getId()));
List<VisitorsCarAppVo> visitorsCarAppVos = BeanUtils.toBean(visitorsCarEntities, VisitorsCarAppVo.class);
bean.setVisitorsCarAppVos(visitorsCarAppVos);
return bean;
}
@Override
public Object vistorsBFSave(VisitorsAppDTO visitors) {
//发起流程
R<Process> processR = remoteFlowApiFlowService.getProcessByBusinessKey(IntegratedFlowConstant.INTEGRATED_VISITOR);
if (!processR.isOk() || processR.getData() == null) {
throw new ServiceException("流程配置获取失败: " + processR.getMsg());
}
String flowId = processR.getData().getFlowId();
ProcessInstanceParamDto processInstanceParamDto = new ProcessInstanceParamDto();
processInstanceParamDto.setFlowId(flowId);
R<String> stringR = remoteFlowApiFlowService.startProcessInstance(processInstanceParamDto);
if (!stringR.isOk() || stringR.getData() == null) {
throw new ServiceException("流程实例启动失败: " + stringR.getMsg());
}
String processInstanceId = stringR.getData();
Long deptId = SecurityUtils.getUser().getDeptId();
VisitorsEntity bean = BeanUtils.toBean(visitors, VisitorsEntity.class);
bean.setType(VisitorTypeEnum.ZDYQ.getType());
bean.setProcessInstanceId(processInstanceId);
bean.setDeptId(deptId);
bean.setCheckStatus(TaskCheckStatusEnum.PADDING.getCode());
String uniqueToken = UUID.randomUUID().toString();
String token = uniqueToken.replace("-", "");
bean.setToken(token);
int insert = baseMapper.insert(bean);
List<VisitorsCarAppDTO> visitorsCarAppDTOList = visitors.getVisitorsCarAppDTOList();
if (!CollectionUtils.isEmpty(visitorsCarAppDTOList)){
List<VisitorsCarEntity> visitorsCarEntities = BeanUtils.toBean(visitorsCarAppDTOList, VisitorsCarEntity.class);
visitorsCarEntities.forEach(i->{
i.setVisitorsId(bean.getId());
});
visitorsCarMapper.insert(visitorsCarEntities);
}
return insert;
}
@Override
public Object getPageBF(Page page, VisitorsEntity visitors) {
Long userId = SecurityUtils.getUser().getId();
LambdaQueryWrapper<VisitorsEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(VisitorsEntity::getUserId, userId);
Page pageData = baseMapper.selectPageByScope(page, wrapper, DataScope.of());
//todo
pageData.getRecords().forEach(i->{
});
return pageData;
}
}
@@ -1,13 +0,0 @@
<?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="com.bsd.pjcloud.integrated.mapper.VisitorsCarMapper">
<resultMap id="visitorsCarMap" type="com.bsd.pjcloud.integrated.entity.VisitorsCarEntity">
<id property="id" column="id"/>
<result property="carNumber" column="car_number"/>
<result property="visitorsId" column="visitors_id"/>
<result property="createTime" column="create_time"/>
<result property="delFlag" column="del_flag"/>
</resultMap>
</mapper>
@@ -1,33 +0,0 @@
<?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="com.bsd.pjcloud.integrated.mapper.VisitorsMapper">
<resultMap id="visitorsMap" type="com.bsd.pjcloud.integrated.entity.VisitorsEntity">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="mobile" column="mobile"/>
<result property="idCard" column="id_card"/>
<result property="description" column="description"/>
<result property="checkStatus" column="check_status"/>
<result property="deptId" column="dept_id"/>
<result property="userName" column="user_name"/>
<result property="carId" column="car_id"/>
<result property="companyName" column="company_name"/>
<result property="peopleNumber" column="people_number"/>
<result property="vStartDate" column="v_start_date"/>
<result property="vEndDate" column="v_end_data"/>
<result property="isDrive" column="is_drive"/>
<result property="processInstanceId" column="process_instance_id"/>
<result property="checkReason" column="check_reason"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="delFlag" column="del_flag"/>
<result property="tenantId" column="tenant_id"/>
<result property="token" column="token"/>
<result property="type" column="type"/>
<result property="userId" column="user_id"/>
</resultMap>
</mapper>
@@ -102,7 +102,7 @@ sms:
templates:
20657: # 验证码模板
content: "您好,您的验证码是{code},有效时间{s1}分钟,请勿转发!"
content: "您好,您的验证码是{code},有效时间{date}分钟,请勿转发!"
params: ["code", "date"]
20658:
content: "您的访客预约申请已通过,请通过地址{url}查看详情!"
@@ -66,5 +66,6 @@
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="debug"/>
<appender-ref ref="error"/>
</root>
</configuration>