This commit is contained in:
2026-04-11 19:11:08 +08:00
parent 62ffe1b5c3
commit 36758e0039
11 changed files with 412 additions and 154 deletions

View File

@ -29,4 +29,6 @@ public class TbZdyFgrwDkDto {
@ApiModelProperty(value = "打卡图片")
private String dktp;
}

View File

@ -29,6 +29,9 @@ public class TbZdyFgrwlq extends BaseEntity implements Serializable, Cloneable {
@ApiModelProperty(value = "方格任务id")
private String fgrwid;
@ApiModelProperty(value = "报备id")
private String bbid;
@ApiModelProperty(value = "方格任务状态D_BZ_QWRWZT 01领取 02已领取 03已完成")
private String fgrwzt;

View File

@ -42,7 +42,7 @@ public class TbZdyFgrwlqdk extends BaseEntity implements Serializable, Cloneable
@ApiModelProperty(value = "打卡人身份证号")
private String darsfzh;
@ApiModelProperty(value = "打卡秃瓢")
@ApiModelProperty(value = "打卡图片")
private String dktp;
@ApiModelProperty(value = "打卡时间")
@ -73,4 +73,18 @@ public class TbZdyFgrwlqdk extends BaseEntity implements Serializable, Cloneable
@ApiModelProperty(value = "所属市公安局代码")
private String sssgajdm;
@ApiModelProperty(value = "离开图片")
private String lktp;
@ApiModelProperty(value = "离开时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date lksj;
@ApiModelProperty(value = "离开经度")
private BigDecimal lkjd;
@ApiModelProperty(value = "离开纬度")
private BigDecimal lkwd;
}

View File

@ -35,4 +35,7 @@ public class TbZdyFgrwQuery extends BasePage {
@ApiModelProperty(value = "任务领取人id")
private String fgrwlqrid;
@ApiModelProperty(value = "报备id")
private String bbid;
}

View File

@ -6,7 +6,6 @@ import com.google.common.collect.Maps;
import com.mosty.base.model.dto.wzzx.LocationConvertDTO;
import com.mosty.base.model.dto.wzzx.LocationInfo;
import com.mosty.base.model.entity.wzzx.TbWzSswz;
import com.mosty.base.utils.CoordinateTransform;
import com.mosty.base.utils.CoordinateUtils;
import com.mosty.base.utils.DateUtils;
import com.mosty.common.base.domain.BaseController;
@ -101,29 +100,22 @@ public class LocationInfoController extends BaseController {
locationInfo.setSourceName("移动设备");
locationInfo.setSourceCode("02");
// Long startTime = System.currentTimeMillis();
// 入库之前将坐标进行转换
// 保存原始坐标
locationInfo.setSourceLat(locationInfo.getLat());
locationInfo.setSourceLng(locationInfo.getLng());
// double[] transfromPonint = CoordinateTransform.transformGCJ02ToWGS84(locationInfo.getLng(),
// locationInfo.getLat());
// // 只保留8位小数
// BigDecimal reLngBd = BigDecimal.valueOf(transfromPonint[0]);
// double reLngDouble = reLngBd.setScale(8, BigDecimal.ROUND_HALF_UP).doubleValue();
// locationInfo.setLng(reLngDouble);
// // 只保留8位小数
// BigDecimal reLatBd = BigDecimal.valueOf(transfromPonint[1]);
// double reLatDouble = reLatBd.setScale(8, BigDecimal.ROUND_HALF_UP).doubleValue();
// locationInfo.setLat(reLatDouble);
//上传坐标转行
if (locationInfo.getLastLng() != null && locationInfo.getLastLat() != null) {
double[] lastTransfromPonint = CoordinateTransform.transformGCJ02ToWGS84(locationInfo.getLastLng(),
locationInfo.getLastLat());
// 只保留8位小数
BigDecimal lastReLngBd = BigDecimal.valueOf(lastTransfromPonint[0]);
BigDecimal reLngBd = BigDecimal.valueOf(locationInfo.getLng());
double reLngDouble = reLngBd.setScale(8, BigDecimal.ROUND_HALF_UP).doubleValue();
locationInfo.setLng(reLngDouble);
BigDecimal reLatBd = BigDecimal.valueOf(locationInfo.getLat());
double reLatDouble = reLatBd.setScale(8, BigDecimal.ROUND_HALF_UP).doubleValue();
locationInfo.setLat(reLatDouble);
// 上次坐标精度处理
if (locationInfo.getLastLng() != null && locationInfo.getLastLat() != null) {
BigDecimal lastReLngBd = BigDecimal.valueOf(locationInfo.getLastLng());
double lastReLngDouble = lastReLngBd.setScale(8, BigDecimal.ROUND_HALF_UP).doubleValue();
locationInfo.setLastLng(lastReLngDouble);
// 只保留8位小数
BigDecimal lastReLatBd = BigDecimal.valueOf(lastTransfromPonint[1]);
BigDecimal lastReLatBd = BigDecimal.valueOf(locationInfo.getLastLat());
double lastReLatDouble = lastReLatBd.setScale(8, BigDecimal.ROUND_HALF_UP).doubleValue();
locationInfo.setLastLat(lastReLatDouble);
}
@ -132,7 +124,6 @@ public class LocationInfoController extends BaseController {
}
//实时存储位置
locationInfoService.locationReceive(locationInfo);
Long endTime = System.currentTimeMillis();
locationInfo.setLastLat(locationInfo.getLat());
locationInfo.setLastLng(locationInfo.getLng());
return ResponseResult.success("添加成功", locationInfo);

View File

@ -57,8 +57,6 @@ public class LocationInfoServiceImpl extends ServiceImpl<TbWzXfwzMapper, TbWzXfw
long sswzTime = 0;
long lswzTime = 0;
long xfbbTime = 0;
//经度、纬度为空不接收数据
try {
if (locationInfo.getLng() == null && locationInfo.getLat() == null) {
@ -301,9 +299,9 @@ public class LocationInfoServiceImpl extends ServiceImpl<TbWzXfwzMapper, TbWzXfw
}
String redisKey = Constant.WZ_XFWZ + locationInfo.getBbid();
//直接去redis存在问题 20240307
TbWzXfwz xfwz = redisService.getCacheObject(redisKey);
// TbWzXfwz xfwz = redisService.getCacheObject(redisKey);
Integer lc = 0;
// TbWzXfwz xfwz = this.baseMapper.queryByBbid(locationInfo.getBbid());
TbWzXfwz xfwz = this.baseMapper.queryByBbid(locationInfo.getBbid());
if (ObjectUtils.isEmpty(xfwz)) {
xfwz = new TbWzXfwz();
}

View File

@ -57,6 +57,7 @@ public class TbWzLswzServiceImpl extends ServiceImpl<TbWzSswzMapper, TbWzSswz> i
if (StringUtils.isNotBlank(locationInfo.getUserId())) {
sjly = sjly + "-" + locationInfo.getUserId();
}
lswz.setId(UUIDGenerator.getUUID());
lswz.setSjly(sjly);
lswz.setSjlydm("02");
lswz.setYwid(locationInfo.getBbid());

View File

@ -4,8 +4,11 @@ package com.mosty.yjzl.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.mosty.base.model.dto.yjzl.TbZdyFgrwDkDto;
import com.mosty.base.model.dto.yjzl.TbZdyFgrwDto;
import com.mosty.base.model.dto.yjzl.TbZdyFgrwLkDto;
import com.mosty.base.model.query.yjzl.TbZdyFgrwlqdkQuery;
import com.mosty.base.model.query.yjzl.TbZdyFgrwQuery;
import com.mosty.base.model.query.yjzl.TbZdyFgrwlqQuery;
import com.mosty.base.model.vo.yjzl.TbZdyFgrwlqdkVO;
import com.mosty.base.model.vo.yjzl.TbZdyFgrwVO;
import com.mosty.common.base.domain.ResponseResult;
import com.mosty.common.token.JwtSysUser;
@ -88,4 +91,25 @@ public class TbZdyFgrwController {
public ResponseResult<Boolean> zdyRwdk(@RequestBody TbZdyFgrwDkDto dto) {
return ResponseResult.success(tbZdyFgrwService.zdyRwdk(dto));
}
@ApiOperation(value = "自定义任务离开打卡")
@PostMapping("/zdyLkdk")
@JwtSysUser
public ResponseResult<Boolean> zdyLkdk(@RequestBody TbZdyFgrwLkDto dto) {
return ResponseResult.success(tbZdyFgrwService.zdyLkdk(dto));
}
@ApiOperation(value = "打卡记录分页查询")
@GetMapping("/selectDkList")
@JwtSysUser
public ResponseResult<IPage<TbZdyFgrwlqdkVO>> selectDkList(TbZdyFgrwlqdkQuery query) {
return ResponseResult.success(tbZdyFgrwService.selectDkList(query));
}
@ApiOperation(value = "根据报备ID查询任务详情列表")
@GetMapping("/getFgrwListByBbid")
@JwtSysUser
public ResponseResult<List<TbZdyFgrwVO>> getFgrwListByBbid(TbZdyFgrwQuery query) {
return ResponseResult.success(tbZdyFgrwService.getFgrwListByBbid(query));
}
}

View File

@ -8,12 +8,19 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mosty.base.model.dto.yjzl.TbZdyFgrwDkDto;
import com.mosty.base.model.dto.yjzl.TbZdyFgrwDto;
import com.mosty.base.model.dto.yjzl.TbZdyFgrwLkDto;
import com.mosty.base.model.entity.qwzx.TbQwXfbb;
import com.mosty.base.model.entity.yjzl.zddw.*;
import com.mosty.base.model.entity.yjzl.zddw.TbZdyFgbxd;
import com.mosty.base.model.entity.yjzl.zddw.TbZdyFgrw;
import com.mosty.base.model.entity.yjzl.zddw.TbZdyFgrwlq;
import com.mosty.base.model.entity.yjzl.zddw.TbZdyFgrwlqdk;
import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgdw;
import com.mosty.base.model.query.yjzl.TbZdyFgrwlqdkQuery;
import com.mosty.base.model.query.yjzl.TbZdyFgrwQuery;
import com.mosty.base.model.query.yjzl.TbZdyFgrwlqQuery;
import com.mosty.base.model.vo.base.DeptInfoVo;
import com.mosty.base.model.vo.yjzl.TbZdxlFgdwVO;
import com.mosty.base.model.vo.yjzl.TbZdyFgrwlqdkVO;
import com.mosty.base.model.vo.yjzl.TbZdyFgrwVO;
import com.mosty.base.utils.*;
import com.mosty.common.base.exception.BusinessException;
@ -43,6 +50,7 @@ public class TbZdyFgrwServiceImpl extends ServiceImpl<TbZdyFgrwMapper, TbZdyFgrw
private final TbZdxlFgdwMapper tbZdxlFgdwMapper;
private final TbZdyFgrwlqdkMapper tbZdyFgrwlqdkMapper;
private final TbQwzxAdaptRemoteService tbQwzxAdaptRemoteService;
@Override
public Boolean addTbZdyrw(TbZdyFgrwDto dto) {
UserInfo user = UserInfoManager.get();
@ -143,7 +151,7 @@ public class TbZdyFgrwServiceImpl extends ServiceImpl<TbZdyFgrwMapper, TbZdyFgrw
.likeRight(StringUtils.isNotEmpty(query.getSsbmdm()), TbZdyFgrw::getSsbmdm, query.getSsbmdm())
.eq(StringUtils.isNotEmpty(query.getXfbmdm()), TbZdyFgrw::getXfbmdm, query.getXfbmdm())
.eq(StringUtils.isNotEmpty(query.getFgrwzt()), TbZdyFgrw::getFgrwzt, query.getFgrwzt())
.orderByDesc(TbZdyFgrw::getXfrq)
.orderByDesc(TbZdyFgrw::getXtCjsj)
);
List<TbZdyFgrwVO> voList = new ArrayList<>();
if (!CollectionUtils.isEmpty(page.getRecords())) {
@ -151,7 +159,7 @@ public class TbZdyFgrwServiceImpl extends ServiceImpl<TbZdyFgrwMapper, TbZdyFgrw
TbZdyFgrwlq rwlq = this.tbZdyFgrwlqMapper.selectOne(
new LambdaQueryWrapper<TbZdyFgrwlq>()
.eq(TbZdyFgrwlq::getFgrwid, tbZdyFgrw.getId())
.eq(TbZdyFgrwlq::getFgrwlqrid,userInfo.getUserId())
// .eq(TbZdyFgrwlq::getFgrwlqrid,userInfo.getUserId())
.last(" limit 1 ")
);
TbZdyFgrwVO vo = new TbZdyFgrwVO();
@ -185,7 +193,13 @@ public class TbZdyFgrwServiceImpl extends ServiceImpl<TbZdyFgrwMapper, TbZdyFgrw
// );
// List<String> ids = mylqs.stream().map(TbZdyFgrwlq::getFgrwid).collect(Collectors.toList());
//今日待领取任务
IPage<TbZdyFgrw> page = this.baseMapper.selectPage(
IPage<TbZdyFgrw> page = new Page<>();
//历史任务(自己已领取任务)
if ("02".equals(query.getAppRwlx())) {
IPage<TbZdyFgrw> pageDto = PageUtils.buildPage(query.getPageSize(), query.getPageCurrent());
page = this.baseMapper.getLqfgrw(pageDto, query);
} else {
page = this.baseMapper.selectPage(
new Page<>(query.getPageCurrent(), query.getPageSize()),
new LambdaQueryWrapper<TbZdyFgrw>()
.like(StringUtils.isNotEmpty(query.getFgRwmc()), TbZdyFgrw::getFgRwmc, query.getFgRwmc())
@ -194,12 +208,8 @@ public class TbZdyFgrwServiceImpl extends ServiceImpl<TbZdyFgrwMapper, TbZdyFgrw
.eq(TbZdyFgrw::getXfrq, DateUtils.getNowDate())
.eq(TbZdyFgrw::getFgrwzt, "01")
// .notIn(!CollectionUtils.isEmpty(ids),TbZdyFgrw::getId,ids)
.orderByDesc(TbZdyFgrw::getXfrq)
.orderByDesc(TbZdyFgrw::getXtCjsj)
);
//历史任务(自己已领取任务)
if("02".equals(query.getAppRwlx())){
IPage<TbZdyFgrw> pageDto = PageUtils.buildPage(query.getPageSize(),query.getPageCurrent());
page = this.baseMapper.getLqfgrw(pageDto,query);
}
List<TbZdyFgrwVO> voList = new ArrayList<>();
if (!CollectionUtils.isEmpty(page.getRecords())) {
@ -260,7 +270,7 @@ public class TbZdyFgrwServiceImpl extends ServiceImpl<TbZdyFgrwMapper, TbZdyFgrw
new LambdaQueryWrapper<TbZdyFgrwlqdk>()
.eq(TbZdyFgrwlqdk::getFgbxdid, bxd.getId())
.eq(TbZdyFgrwlqdk::getFgrwid, tbZdyFgrw.getId())
.eq(TbZdyFgrwlqdk::getDkrid,userInfo.getUserId().toString())
// .eq(TbZdyFgrwlqdk::getDkrid,userInfo.getUserId().toString())
.orderByDesc(TbZdyFgrwlqdk::getDksj)
.last(" limit 1 ")
);
@ -272,7 +282,14 @@ public class TbZdyFgrwServiceImpl extends ServiceImpl<TbZdyFgrwMapper, TbZdyFgrw
map.put("wd", bxd.getWd());
map.put("dkzt", "已打卡");
map.put("dksj", dk.getDksj());
map.put("dkr", dk.getDkr());
map.put("dktp", dk.getDktp());
map.put("id", dk.getId());
map.put("lktp", dk.getLktp());
map.put("lksj", dk.getLksj());
map.put("lkjd", dk.getLkjd());
map.put("lkwd", dk.getLkwd());
} else {
map.put("fgrwid", bxd.getFgrwid());
map.put("bxdid", bxd.getId());
@ -314,6 +331,7 @@ public class TbZdyFgrwServiceImpl extends ServiceImpl<TbZdyFgrwMapper, TbZdyFgrw
UserInfo userInfo = UserInfoManager.get();
TbQwXfbb tbQwXfbb = this.baseMapper.selectXfbbByFzrSfzh(userInfo.getIdEntityCard(), DateUtils.getNowDate());
if (Objects.isNull(tbQwXfbb)) throw new BusinessException("请先报备,再领取!");
TbZdyFgrw fgrw = this.baseMapper.selectById(query.getFgrwid());
if (Objects.isNull(fgrw)) throw new BusinessException("方格任务不存在!");
fgrw.setFgrwzt("02");
@ -327,6 +345,7 @@ public class TbZdyFgrwServiceImpl extends ServiceImpl<TbZdyFgrwMapper, TbZdyFgrw
TbZdyFgrwlq rwlq = new TbZdyFgrwlq();
rwlq.setId(UUIDGenerator.getUUID());
rwlq.setFgrwzt("02");
rwlq.setBbid(tbQwXfbb.getId());
rwlq.setFgrwid(query.getFgrwid());
rwlq.setFgrwlqrid(userInfo.getUserId().toString());
rwlq.setFgrwlqrsfzh(userInfo.getIdEntityCard());
@ -370,6 +389,11 @@ public class TbZdyFgrwServiceImpl extends ServiceImpl<TbZdyFgrwMapper, TbZdyFgrw
map.put("dkzt", "已打卡");
map.put("dksj", dk.getDksj());
map.put("dktp", dk.getDktp());
map.put("id", dk.getId());
map.put("lktp", dk.getLktp());
map.put("lksj", dk.getLksj());
map.put("lkjd", dk.getLkjd());
map.put("lkwd", dk.getLkwd());
} else {
map.put("fgrwid", bxd.getFgrwid());
map.put("bxdid", bxd.getId());
@ -431,4 +455,190 @@ public class TbZdyFgrwServiceImpl extends ServiceImpl<TbZdyFgrwMapper, TbZdyFgrw
this.tbZdyFgrwlqdkMapper.insert(tbZdyFgrwlqdk);
return true;
}
@Override
public Boolean zdyLkdk(TbZdyFgrwLkDto dto) {
TbZdyFgrwlqdk tbZdyFgrwlqdk = this.tbZdyFgrwlqdkMapper.selectById(dto.getId());
if (Objects.isNull(tbZdyFgrwlqdk)) throw new BusinessException("打卡记录不存在!");
if (Objects.nonNull(tbZdyFgrwlqdk.getLksj())) throw new BusinessException("已离开打卡,请勿重复操作!");
// 校验距离
TbZdyFgbxd tbZdyFgbxd = this.tbZdyFgbxdMapper.selectById(tbZdyFgrwlqdk.getFgbxdid());
if (Objects.nonNull(tbZdyFgbxd)) {
long jl = PositionUtil.getDistance(dto.getLkjd().doubleValue(), dto.getLkwd().doubleValue(),
tbZdyFgbxd.getJd().doubleValue(), tbZdyFgbxd.getWd().doubleValue());
if (jl > 100L) throw new BusinessException("您的位置在卡点100米以外无法离开打卡");
}
// 更新离开信息
tbZdyFgrwlqdk.setLktp(dto.getLktp());
tbZdyFgrwlqdk.setLksj(new Date());
tbZdyFgrwlqdk.setLkjd(dto.getLkjd());
tbZdyFgrwlqdk.setLkwd(dto.getLkwd());
this.tbZdyFgrwlqdkMapper.updateById(tbZdyFgrwlqdk);
return true;
}
@Override
public IPage<TbZdyFgrwlqdkVO> selectDkList(TbZdyFgrwlqdkQuery query) {
query.setSsbmdm(this.tbBaseAdaptRemoteService.getSsbm(query.getSsbmdm(), null));
IPage<TbZdyFgrwlqdk> page = this.tbZdyFgrwlqdkMapper.selectPage(
new Page<>(query.getPageCurrent(), query.getPageSize()),
new LambdaQueryWrapper<TbZdyFgrwlqdk>()
.eq(StringUtils.isNotEmpty(query.getFgrwid()), TbZdyFgrwlqdk::getFgrwid, query.getFgrwid())
.eq(StringUtils.isNotEmpty(query.getFgbxdid()), TbZdyFgrwlqdk::getFgbxdid, query.getFgbxdid())
.eq(StringUtils.isNotEmpty(query.getDkrid()), TbZdyFgrwlqdk::getDkrid, query.getDkrid())
.like(StringUtils.isNotEmpty(query.getDkr()), TbZdyFgrwlqdk::getDkr, query.getDkr())
.likeRight(StringUtils.isNotEmpty(query.getSsbmdm()), TbZdyFgrwlqdk::getSsbmdm, query.getSsbmdm())
.orderByDesc(TbZdyFgrwlqdk::getDksj)
);
List<TbZdyFgrwlqdkVO> voList = new ArrayList<>();
if (!CollectionUtils.isEmpty(page.getRecords())) {
// 批量查询点位名称
Set<String> bxdIds = page.getRecords().stream()
.map(TbZdyFgrwlqdk::getFgbxdid)
.filter(StringUtils::isNotEmpty)
.collect(Collectors.toSet());
Map<String, String> bxdNameMap = new HashMap<>();
if (!CollectionUtils.isEmpty(bxdIds)) {
List<TbZdyFgbxd> bxds = this.tbZdyFgbxdMapper.selectBatchIds(bxdIds);
bxdNameMap = bxds.stream()
.collect(Collectors.toMap(TbZdyFgbxd::getId, TbZdyFgbxd::getBxdMc, (v1, v2) -> v1));
}
Map<String, String> finalBxdNameMap = bxdNameMap;
page.getRecords().forEach(dk -> {
TbZdyFgrwlqdkVO vo = new TbZdyFgrwlqdkVO();
BeanUtils.copyProperties(dk, vo);
vo.setBxdMc(finalBxdNameMap.get(dk.getFgbxdid()));
voList.add(vo);
});
}
IPage<TbZdyFgrwlqdkVO> pageVo = new Page<>(page.getCurrent(), page.getSize());
pageVo.setTotal(page.getTotal());
pageVo.setRecords(voList);
return pageVo;
}
@Override
public List<TbZdyFgrwVO> getFgrwListByBbid(TbZdyFgrwQuery query) {
// 根据报备ID查询任务领取记录
List<TbZdyFgrwlq> lqList = this.tbZdyFgrwlqMapper.selectList(
new LambdaQueryWrapper<TbZdyFgrwlq>()
.eq(StringUtils.isNotEmpty(query.getBbid()), TbZdyFgrwlq::getBbid, query.getBbid())
);
if (CollectionUtils.isEmpty(lqList)) {
return new ArrayList<>();
}
// 获取任务ID列表
List<String> fgrwIds = lqList.stream()
.map(TbZdyFgrwlq::getFgrwid)
.collect(Collectors.toList());
// 批量查询任务详情
List<TbZdyFgrw> fgrwList = this.baseMapper.selectBatchIds(fgrwIds);
if (CollectionUtils.isEmpty(fgrwList)) {
return new ArrayList<>();
}
// 批量查询所有任务的点位
List<TbZdyFgbxd> allBxds = this.tbZdyFgbxdMapper.selectList(
new LambdaQueryWrapper<TbZdyFgbxd>()
.in(TbZdyFgbxd::getFgrwid, fgrwIds)
);
// 按任务ID分组点位
Map<String, List<TbZdyFgbxd>> bxdMap = CollectionUtils.isEmpty(allBxds)
? new HashMap<>()
: allBxds.stream().collect(Collectors.groupingBy(TbZdyFgbxd::getFgrwid));
// 构建领取记录映射包含领取人ID用于筛选打卡记录
Map<String, TbZdyFgrwlq> lqMap = lqList.stream()
.collect(Collectors.toMap(TbZdyFgrwlq::getFgrwid, v -> v, (v1, v2) -> v1));
// 获取所有领取人ID
Set<String> dkrids = lqList.stream()
.map(TbZdyFgrwlq::getFgrwlqrid)
.filter(StringUtils::isNotEmpty)
.collect(Collectors.toSet());
// 批量查询所有任务的打卡记录
List<TbZdyFgrwlqdk> allDks = CollectionUtils.isEmpty(dkrids) ? new ArrayList<>()
: this.tbZdyFgrwlqdkMapper.selectList(
new LambdaQueryWrapper<TbZdyFgrwlqdk>()
.in(TbZdyFgrwlqdk::getFgrwid, fgrwIds)
.in(TbZdyFgrwlqdk::getDkrid, dkrids)
.orderByDesc(TbZdyFgrwlqdk::getDksj)
);
// 按 fgrwid+fgbxdid 分组,取最新的一条打卡记录
Map<String, TbZdyFgrwlqdk> dkMap = new HashMap<>();
if (!CollectionUtils.isEmpty(allDks)) {
for (TbZdyFgrwlqdk dk : allDks) {
String key = dk.getFgrwid() + "_" + dk.getFgbxdid();
if (!dkMap.containsKey(key)) {
dkMap.put(key, dk);
}
}
}
// 组装返回数据
List<TbZdyFgrwVO> voList = new ArrayList<>();
fgrwList.forEach(fgrw -> {
TbZdyFgrwVO vo = new TbZdyFgrwVO();
BeanUtils.copyProperties(fgrw, vo);
// 设置领取人信息
TbZdyFgrwlq lq = lqMap.get(fgrw.getId());
if (Objects.nonNull(lq)) {
vo.setFgrwlqr(lq.getFgrwlqr());
vo.setFgrwlqrid(lq.getFgrwlqrid());
vo.setFgrwlqrsfzh(lq.getFgrwlqrsfzh());
vo.setFgrwzt(lq.getFgrwzt());
}
// 设置任务点位(含打卡信息)
List<TbZdyFgbxd> bxds = bxdMap.get(fgrw.getId());
if (!CollectionUtils.isEmpty(bxds)) {
List<Map<String, Object>> bxdMaps = bxds.stream().map(bxd -> {
Map<String, Object> map = new HashMap<>();
map.put("bxdid", bxd.getId());
map.put("bxdMc", bxd.getBxdMc());
map.put("jd", bxd.getJd());
map.put("wd", bxd.getWd());
// 查询该点位的打卡记录
String dkKey = fgrw.getId() + "_" + bxd.getId();
TbZdyFgrwlqdk dk = dkMap.get(dkKey);
if (Objects.nonNull(dk)) {
// 开始打卡信息
map.put("dkzt", "已打卡");
map.put("dksj", dk.getDksj());
map.put("dktp", dk.getDktp());
map.put("dkJd", dk.getJd());
map.put("dkWd", dk.getWd());
// 离开打卡信息
map.put("lksj", dk.getLksj());
map.put("lktp", dk.getLktp());
map.put("lkJd", dk.getLkjd());
map.put("lkWd", dk.getLkwd());
} else {
map.put("dkzt", "未打卡");
map.put("dksj", null);
map.put("dktp", null);
map.put("dkJd", null);
map.put("dkWd", null);
map.put("lksj", null);
map.put("lktp", null);
map.put("lkJd", null);
map.put("lkWd", null);
}
return map;
}).collect(Collectors.toList());
vo.setBxds(bxdMaps);
}
voList.add(vo);
});
return voList;
}
}

View File

@ -3,8 +3,11 @@ package com.mosty.yjzl.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.mosty.base.model.dto.yjzl.TbZdyFgrwDkDto;
import com.mosty.base.model.dto.yjzl.TbZdyFgrwDto;
import com.mosty.base.model.dto.yjzl.TbZdyFgrwLkDto;
import com.mosty.base.model.query.yjzl.TbZdyFgrwlqdkQuery;
import com.mosty.base.model.query.yjzl.TbZdyFgrwQuery;
import com.mosty.base.model.query.yjzl.TbZdyFgrwlqQuery;
import com.mosty.base.model.vo.yjzl.TbZdyFgrwlqdkVO;
import com.mosty.base.model.vo.yjzl.TbZdyFgrwVO;
import org.springframework.web.bind.annotation.RequestBody;
@ -30,4 +33,13 @@ public interface TbZdyFgrwService {
Map<String,Object> getFgrwDkXq(TbZdyFgrwQuery query);
Boolean zdyRwdk(TbZdyFgrwDkDto dto);
Boolean zdyLkdk(TbZdyFgrwLkDto dto);
IPage<TbZdyFgrwlqdkVO> selectDkList(TbZdyFgrwlqdkQuery query);
/**
* 根据报备ID查询任务详情列表含任务点位
*/
List<TbZdyFgrwVO> getFgrwListByBbid(TbZdyFgrwQuery query);
}

View File

@ -16,7 +16,7 @@
<if test="dto.fgrwlqrid != null and dto.fgrwlqrid != ''">
and rwlq.fgrwlqrid = #{dto.fgrwlqrid}
</if>
order by fgrw.xfrq desc
order by rwlq.xt_cjsj desc
</select>
<select id="selectXfbbByFzrSfzh" resultType="com.mosty.base.model.entity.qwzx.TbQwXfbb">