增加点位打卡功能,以及关联功能

This commit is contained in:
2025-09-08 20:00:30 +08:00
parent 98eb02a007
commit d32e8436a5
50 changed files with 5281 additions and 185 deletions

View File

@ -0,0 +1,66 @@
package com.mosty.base.feign.remote;
import com.alibaba.fastjson.JSON;
import com.mosty.base.feign.service.MostyQwzxFeignService;
import com.mosty.base.model.dto.qwzx.TbQwXfbbVo;
import com.mosty.base.model.entity.qwzx.TbQwXfbb;
import com.mosty.common.base.domain.ResponseResult;
import com.mosty.common.base.entity.log.SpringUtils;
import com.mosty.common.base.exception.BusinessException;
import lombok.extern.slf4j.Slf4j;
/**
* @author
* @description qwgl服务FeignService路由工具
* @modifier
* @modifiedTime 2025/05/26 19:30
* @since 2025/25/26 19:30
*/
@Slf4j
public class MostyQwzxFeignServiceRemote {
/**
* 基础服务FeignService
*/
private static MostyQwzxFeignService mostyQwzxFeignService;
/**
* 获取基础服务FeignService
* @return MostyQwglFeignService
*/
private static MostyQwzxFeignService getService(){
if(mostyQwzxFeignService == null){
mostyQwzxFeignService = SpringUtils.getBean(MostyQwzxFeignService.class);
}
return mostyQwzxFeignService;
}
/**
* 根据报备ID获取报备详情
* @param id 主键ID
* @return 报备详情
*/
public static TbQwXfbbVo getXfbbInfo(String id) {
ResponseResult<TbQwXfbbVo> responseResult = MostyQwzxFeignServiceRemote.getService().getBbInfo(id);
if (responseResult == null || !responseResult.isSuccess()) {
log.error("根据报备ID获取报备详情异常 responseResult = {}", JSON.toJSONString(responseResult));
throw new BusinessException("根据报备ID获取报备详情异常");
}
return responseResult.getData();
}
/**
* 查询我今天的报备new
* @param bblx 报备类型
* @return 报备详情
*/
public static TbQwXfbb getMyXfbbTodayNew(String bblx) {
ResponseResult<TbQwXfbb> responseResult = MostyQwzxFeignServiceRemote.getService().getMyXfbbTodayNew(bblx);
if (responseResult == null || !responseResult.isSuccess()) {
log.error("查询我今天的报备异常 responseResult = {}", JSON.toJSONString(responseResult));
throw new BusinessException("查询我今天的报备异常");
}
return responseResult.getData();
}
}

View File

@ -54,4 +54,12 @@ public interface MostyQwzxFeignService {
// 查询部门时长、里程
@PostMapping("/mosty-qwzx/tbQwXfbb/getScLc")
ResponseResult<Map<String, Integer>> getScLc(@RequestParam("ssbmdm") String ssbmdm, @RequestParam("time") String time);
/**
* 查询我今天的报备new
* @param bblx 报备类型
* @return 报备信息
*/
@GetMapping("/mosty-qwzx/tbQwXfbb/getMybbTodayNew")
ResponseResult<TbQwXfbb> getMyXfbbTodayNew(@RequestParam String bblx);
}

View File

@ -0,0 +1,70 @@
package com.mosty.base.model.dto.yjzl;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.math.BigDecimal;
/**
* @author zhangzhao
* @description 指导巡逻方格点位必到点表保存DTO对象
* @modifier zhangzhao
* @modifiedTime 2025/09/06 14:31
* @since 2025/09/06 14:31
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "TbZdxlFgdwBddSaveDTO对象", description = "指导巡逻方格点位必到点表保存DTO对象")
public class TbZdxlFgdwBddSaveDTO {
/**
* 方格点位ID
*/
@ApiModelProperty(value = "方格点位ID")
@NotNull(message = "zdxl.fgdwBdd.fgdwId.notNull")
private Long fgdwId;
/**
* 必到点名称
*/
@ApiModelProperty(value = "必到点名称")
@NotBlank(message = "zdxl.fgdwBdd.bddMc.notBlank")
@Size(max = 64, message = "zdxl.fgdwBdd.bddMc.size")
private String bddMc;
/**
* 必到点地址
*/
@ApiModelProperty(value = "必到点地址")
@Size(max = 255, message = "zdxl.fgdwBdd.bddDz.size")
private String bddDz;
/**
* 必到点说明
*/
@ApiModelProperty(value = "必到点说明")
@Size(max = 128, message = "zdxl.fgdwBdd.bddSm.size")
private String bddSm;
/**
* 经度
*/
@ApiModelProperty(value = "经度")
@NotNull(message = "zdxl.fgdwBdd.jd.notNull")
private BigDecimal jd;
/**
* 纬度
*/
@ApiModelProperty(value = "纬度")
@NotNull(message = "zdxl.fgdwBdd.wd.notNull")
private BigDecimal wd;
}

View File

@ -0,0 +1,77 @@
package com.mosty.base.model.dto.yjzl;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.math.BigDecimal;
/**
* @author zhangzhao
* @description 岗哨系统线索专题表修改DTO对象
* @modifier zhangzhao
* @modifiedTime 2025/09/06 14:33
* @since 2025/09/06 14:33
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "TbGsxtXsztUpdateDTO对象", description = "岗哨系统线索专题表修改DTO对象")
public class TbZdxlFgdwBddUpdateDTO {
/**
* 主键id
*/
@ApiModelProperty(value = "主键id", required = true)
@NotBlank(message = "id.bnwk")
private String id;
/**
* 方格点位ID
*/
@ApiModelProperty(value = "方格点位ID")
@NotNull(message = "zdxl.fgdwBdd.fgdwId.notNull")
private Long fgdwId;
/**
* 必到点名称
*/
@ApiModelProperty(value = "必到点名称")
@NotBlank(message = "zdxl.fgdwBdd.bddMc.notBlank")
@Size(max = 64, message = "zdxl.fgdwBdd.bddMc.size")
private String bddMc;
/**
* 必到点地址
*/
@ApiModelProperty(value = "必到点地址")
@Size(max = 255, message = "zdxl.fgdwBdd.bddDz.size")
private String bddDz;
/**
* 必到点说明
*/
@ApiModelProperty(value = "必到点说明")
@Size(max = 128, message = "zdxl.fgdwBdd.bddSm.size")
private String bddSm;
/**
* 经度
*/
@ApiModelProperty(value = "经度")
@NotNull(message = "zdxl.fgdwBdd.jd.notNull")
private BigDecimal jd;
/**
* 纬度
*/
@ApiModelProperty(value = "纬度")
@NotNull(message = "zdxl.fgdwBdd.wd.notNull")
private BigDecimal wd;
}

View File

@ -0,0 +1,64 @@
package com.mosty.base.model.dto.yjzl;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @author zhangzhao
* @description 指导巡逻方格点位必到点巡逻任务表操作DTO对象
* @modifier zhangzhao
* @modifiedTime 2025/09/07 16:54
* @since 2025/09/07 16:54
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "TbZdxlFgdwBddxlrwHandleDTO对象", description = "指导巡逻方格点位必到点巡逻任务表操作DTO对象")
public class TbZdxlFgdwBddxlrwHandleDTO {
/**
* 主键ID
*/
@ApiModelProperty(value = "主键ID")
private String id;
/**
* 必到点ID
*/
@ApiModelProperty(value = "必到点ID")
private String bddId;
/**
* 方格巡逻任务ID
*/
@ApiModelProperty(value = "方格巡逻任务ID")
private String fgxlrwId;
/**
* 巡逻规划打卡次数
*/
@ApiModelProperty(value = "巡逻规划打卡次数")
private Integer xlghDkcs;
/**
* 巡逻实际打卡次数
*/
@ApiModelProperty(value = "巡逻实际打卡次数")
private Integer xlsjDkcs;
/**
* 是否开始 D_BZ_SF
*/
@ApiModelProperty(value = "是否开始 D_BZ_SF")
private String sfKs;
/**
* 是否结束 D_BZ_SF
*/
@ApiModelProperty(value = "是否结束 D_BZ_SF")
private String sfJs;
}

View File

@ -0,0 +1,56 @@
package com.mosty.base.model.dto.yjzl;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.math.BigDecimal;
/**
* @author zhangzhao
* @description 指导巡逻方格点位必到点巡逻任务记录表打卡DTO对象
* @modifier zhangzhao
* @modifiedTime 2025/09/07 20:43
* @since 2025/09/07 20:43
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "TbZdxlFgdwBddxlrwJlClockInDTO对象", description = "指导巡逻方格点位必到点巡逻任务记录表打卡DTO对象")
public class TbZdxlFgdwBddxlrwJlClockInDTO {
/**
* 主键ID
*/
@ApiModelProperty(value = "主键ID")
@NotBlank(message = "id.bnwk")
private String id;
/**
* 打卡附件
*/
@ApiModelProperty(value = "打卡附件")
// @NotBlank(message = "zdxl.fgdwBdd.xlrwJl.dkFj.notBlank")
@Size(max = 255, message = "zdxl.fgdwBdd.xlrwJl.dkFj.size")
private String dkFj;
/**
* 打卡经度
*/
@ApiModelProperty(value = "打卡经度")
@NotNull(message = "zdxl.fgdwBdd.xlrwJl.dkJd.notNull")
private BigDecimal dkJd;
/**
* 打卡纬度
*/
@ApiModelProperty(value = "打卡纬度")
@NotNull(message = "zdxl.fgdwBdd.xlrwJl.dkWd.notNull")
private BigDecimal dkWd;
}

View File

@ -0,0 +1,55 @@
package com.mosty.base.model.dto.yjzl;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
/**
* @author zhangzhao
* @description 指导巡逻方格默认配置表修改DTO对象
* @modifier zhangzhao
* @modifiedTime 2025/09/05 19:16
* @since 2025/09/05 19:16
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "TbZdxlFgmrpzUpdateDTO对象", description = "指导巡逻方格默认配置表修改DTO对象")
public class TbZdxlFgmrpzUpdateDTO {
/**
* 主键id
*/
@ApiModelProperty(value = "主键id", required = true)
@NotBlank(message = "id.bnwk")
private String id;
/**
* 盘查车辆
*/
@ApiModelProperty(value = "盘查车辆")
private Integer pcCl;
/**
* 盘查人员
*/
@ApiModelProperty(value = "盘查人员")
private Integer pcRy;
/**
* 巡逻时长(分钟)
*/
@ApiModelProperty(value = "巡逻时长(分钟)")
private Double xlSc;
/**
* 巡逻里程(公里)
*/
@ApiModelProperty(value = "巡逻里程(公里)")
private Double xlLc;
}

View File

@ -0,0 +1,28 @@
package com.mosty.base.model.dto.yjzl;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @author zhangzhao
* @description 指导巡逻方格巡逻任务表下发DTO对象
* @modifier zhangzhao
* @modifiedTime 2025/09/07 17:23
* @since 2025/09/07 17:23
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "TbZdxlFgxlrwIssueDTO对象", description = "指导巡逻方格巡逻任务表下发DTO对象")
public class TbZdxlFgxlrwIssueDTO {
/**
* 主键id字符串用英语逗号“,”分隔)
*/
@ApiModelProperty(value = "主键id字符串用英语逗号“,”分隔)")
private String ids;
}

View File

@ -1,53 +0,0 @@
package com.mosty.base.model.dto.yjzl;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
/**
* @author zhangzhao
* @description 指导巡逻方格巡逻任务表警情配置修改DTO对象
* @modifier zhangzhao
* @modifiedTime 2025/08/26 17:16
* @since 2025/08/26 17:16
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "TbZdxlFgxlrwJqpzUpdateDTO对象", description = "指导巡逻方格巡逻任务表警情配置修改DTO对象")
public class TbZdxlFgxlrwJqpzUpdateDTO {
/**
* 报警细类
*/
@ApiModelProperty(value = "报警细类")
@NotBlank(message = "zdxl.fgxlrw.jqpz.bjxl.notBlank")
@Size(max = 1000, message = "zdxl.fgxlrw.jqpz.bjxl.size")
private String bjxl;
/**
* 报警细类说明
*/
@Size(max = 200, message = "zdxl.fgxlrw.jqpz.bjxlSm.size")
private String bjxlSm;
/**
* 报警子类
*/
@ApiModelProperty(value = "报警子类")
@NotBlank(message = "zdxl.fgxlrw.jqpz.bjzl.notBlank")
@Size(max = 1000, message = "zdxl.fgxlrw.jqpz.bjzl.size")
private String bjzl;
/**
* 报警子类说明
*/
@Size(max = 200, message = "zdxl.fgxlrw.jqpz.bjzlSm.size")
private String bjzlSm;
}

View File

@ -12,6 +12,7 @@ import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
/**
* @author zhangzhao
@ -79,4 +80,28 @@ public class TbZdxlFgxlrwUpdateDTO {
@NotNull(message = "zdxl.fgxlrw.rwRq.xlghXllc.notNull")
private Double xlghXllc;
/**
* 巡逻规划盘查车辆
*/
@ApiModelProperty(value = "巡逻规划盘查车辆")
private Integer xlghPcCl;
/**
* 巡逻规划盘查人员
*/
@ApiModelProperty(value = "巡逻规划盘查人员")
private Integer xlghPcRy;
/**
* 巡防报备ID
*/
@ApiModelProperty(value = "巡防报备ID")
private String xfbbId;
/**
* 必到点列表
*/
@ApiModelProperty(value = "必到点列表")
List<TbZdxlFgdwBddxlrwHandleDTO> bddList;
}

View File

@ -41,7 +41,7 @@ public class TbZdxlFgdw extends BaseEntity implements Serializable, Cloneable {
@ApiModelProperty(value = "主键ID")
@TableId(value = "id", type = IdType.AUTO)
@Excel(name = "主键ID", sort = 1)
private Integer id;
private Long id;
/**
* 名称
@ -194,7 +194,7 @@ public class TbZdxlFgdw extends BaseEntity implements Serializable, Cloneable {
/**
* 字段名
*/
public static String MC = "mc";
public static String MC = "mc1";
/**
* 字段名
@ -209,22 +209,22 @@ public class TbZdxlFgdw extends BaseEntity implements Serializable, Cloneable {
/**
* 字段名
*/
public static String X1 = "x1";
public static String X1 = "x11";
/**
* 字段名
*/
public static String Y1 = "y1";
public static String Y1 = "y11";
/**
* 字段名
*/
public static String X2 = "x2";
public static String X2 = "x21";
/**
* 字段名
*/
public static String Y2 = "y2";
public static String Y2 = "y21";
/**
* 字段名
@ -257,12 +257,12 @@ public class TbZdxlFgdw extends BaseEntity implements Serializable, Cloneable {
public static String SSBMID_TYPE = "ssbmid";
/**
* 报备部门
* 所属部门
*/
public static String SSBM_TYPE = "ssbm";
/**
* 报备部门代码
* 所属部门代码
*/
public static String SSBMDM_TYPE = "ssbmdm";

View File

@ -0,0 +1,227 @@
package com.mosty.base.model.entity.yjzl.zddw;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.mosty.base.model.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author zhangzhao
* @description 指导巡逻方格点位必到点表
* @modifier zhangzhao
* @modifiedTime 2025/09/06 11:49
* @since 2025/09/06 11:49
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("tb_zdxl_fgdw_bdd")
@ApiModel(value = "TbZdxlFgdwBdd对象", description = "指导巡逻方格点位必到点表")
public class TbZdxlFgdwBdd extends BaseEntity implements Serializable, Cloneable {
@TableField(exist = false)
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ApiModelProperty(value = "主键ID")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
/**
* 方格点位ID
*/
@ApiModelProperty(value = "方格点位ID")
@TableField(value = "fgdw_id")
private Long fgdwId;
/**
* 必到点名称
*/
@ApiModelProperty(value = "必到点名称")
@TableField(value = "bdd_mc")
private String bddMc;
/**
* 必到点地址
*/
@ApiModelProperty(value = "必到点地址")
@TableField(value = "bdd_dz")
private String bddDz;
/**
* 必到点说明
*/
@ApiModelProperty(value = "必到点说明")
@TableField(value = "bdd_sm")
private String bddSm;
/**
* 经度
*/
@ApiModelProperty(value = "经度")
@TableField(value = "jd")
private BigDecimal jd;
/**
* 纬度
*/
@ApiModelProperty(value = "纬度")
@TableField(value = "wd")
private BigDecimal wd;
/**
* 所属部门id
*/
@ApiModelProperty(value = "所属部门id")
@TableField(value = "ssbmid")
private String ssbmid;
/**
* 所属部门
*/
@ApiModelProperty(value = "所属部门")
@TableField(value = "ssbm")
private String ssbm;
/**
* 所属部门代码
*/
@ApiModelProperty(value = "所属部门代码")
@TableField(value = "ssbmdm")
private String ssbmdm;
/**
* 所属县公安局
*/
@ApiModelProperty(value = "所属县公安局")
@TableField(value = "ssxgaj")
private String ssxgaj;
/**
* 所属县公安局id
*/
@ApiModelProperty(value = "所属县公安局id")
@TableField(value = "ssxgajid")
private String ssxgajid;
/**
* 所属县公安局代码
*/
@ApiModelProperty(value = "所属县公安局代码")
@TableField(value = "ssxgajdm")
private String ssxgajdm;
/**
* 所属市公安局id
*/
@ApiModelProperty(value = "所属市公安局id")
@TableField(value = "sssgajid")
private String sssgajid;
/**
* 所属市公安局
*/
@ApiModelProperty(value = "所属市公安局")
@TableField(value = "sssgaj")
private String sssgaj;
/**
* 所属市公安局代码
*/
@ApiModelProperty(value = "所属市公安局代码")
@TableField(value = "sssgajdm")
private String sssgajdm;
/**
* 主键ID字段名
*/
public static String ID_FIELD = "id";
/**
* 方格点位ID字段名
*/
public static String FGDW_ID_FIELD = "fgdw_id";
/**
* 必到点名称字段名
*/
public static String BDD_MC_FIELD = "bdd_mc";
/**
* 必到点地址字段名
*/
public static String BDD_DZ_FIELD = "bdd_dz";
/**
* 必到点说明字段名
*/
public static String BDD_SM_FIELD = "bdd_sm";
/**
* 经度字段名
*/
public static String JD_FIELD = "jd";
/**
* 纬度字段名
*/
public static String WD_FIELD = "wd";
/**
* 所属部门id
*/
public static String SSBMID_TYPE = "ssbmid";
/**
* 所属部门
*/
public static String SSBM_TYPE = "ssbm";
/**
* 所属部门代码
*/
public static String SSBMDM_TYPE = "ssbmdm";
/**
* 所属县公安局
*/
public static String SSXGAJ_TYPE = "ssxgaj";
/**
* 所属县公安局id
*/
public static String SSXGAJID_TYPE = "ssxgajid";
/**
* 所属县公安局代码
*/
public static String SSXGAJDM_TYPE = "ssxgajdm";
/**
* 所属市公安局id
*/
public static String SSSGAJID_TYPE = "sssgajid";
/**
* 所属市公安局
*/
public static String SSSGAJ_TYPE = "sssgaj";
/**
* 所属市公安局代码
*/
public static String SSSGAJDM_TYPE = "sssgajdm";
}

View File

@ -0,0 +1,118 @@
package com.mosty.base.model.entity.yjzl.zddw;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.mosty.base.model.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* @author zhangzhao
* @description 指导巡逻方格点位必到点巡逻任务表
* @modifier zhangzhao
* @modifiedTime 2025/09/06 19:27
* @since 2025/09/06 19:27
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("tb_zdxl_fgdw_bddxlrw")
@ApiModel(value = "TbZdxlFgdwBddxlrw对象", description = "指导巡逻方格点位必到点巡逻任务表")
public class TbZdxlFgdwBddxlrw extends BaseEntity implements Serializable, Cloneable {
@TableField(exist = false)
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ApiModelProperty(value = "主键ID")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
/**
* 必到点ID
*/
@ApiModelProperty(value = "必到点ID")
@TableField(value = "bdd_id")
private String bddId;
/**
* 方格巡逻任务ID
*/
@ApiModelProperty(value = "方格巡逻任务ID")
@TableField(value = "fgxlrw_id")
private String fgxlrwId;
/**
* 巡逻规划打卡次数
*/
@ApiModelProperty(value = "巡逻规划打卡次数")
@TableField(value = "xlgh_dkcs")
private Integer xlghDkcs;
/**
* 巡逻实际打卡次数
*/
@ApiModelProperty(value = "巡逻实际打卡次数")
@TableField(value = "xlsj_dkcs")
private Integer xlsjDkcs;
/**
* 是否开始 D_BZ_SF
*/
@ApiModelProperty(value = "是否开始 D_BZ_SF")
@TableField(value = "sf_ks")
private String sfKs;
/**
* 是否结束 D_BZ_SF
*/
@ApiModelProperty(value = "是否结束 D_BZ_SF")
@TableField(value = "sf_js")
private String sfJs;
/**
* 主键ID字段名
*/
public static String ID_FIELD = "id";
/**
* 必到点ID字段名
*/
public static String BDD_ID_FIELD = "bdd_id";
/**
* 方格巡逻任务ID字段名
*/
public static String FGXLRW_ID_FIELD = "fgxlrw_id";
/**
* 巡逻规划打卡次数字段名
*/
public static String XLGH_DKCS_FIELD = "xlgh_dkcs";
/**
* 巡逻实际打卡次数字段名
*/
public static String XLSJ_DKCS_FIELD = "xlsj_dkcs";
/**
* 是否开始字段名
*/
public static String SF_KS_FIELD = "sf_ks";
/**
* 是否结束字段名
*/
public static String SF_JS_FIELD = "sf_js";
}

View File

@ -0,0 +1,306 @@
package com.mosty.base.model.entity.yjzl.zddw;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mosty.base.model.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author zhangzhao
* @description 指导巡逻方格点位必到点巡逻任务记录表
* @modifier zhangzhao
* @modifiedTime 2025/09/07 19:06
* @since 2025/09/07 19:06
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("tb_zdxl_fgdw_bddxlrw_jl")
@ApiModel(value = "TbZdxlFgdwBddxlrwJl对象", description = "指导巡逻方格点位必到点巡逻任务记录表")
public class TbZdxlFgdwBddxlrwJl extends BaseEntity implements Serializable, Cloneable {
@TableField(exist = false)
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ApiModelProperty(value = "主键ID")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
/**
* 必到点巡逻任务ID
*/
@ApiModelProperty(value = "必到点巡逻任务ID")
@TableField(value = "bddxlrw_id")
private String bddxlrwId;
/**
* 开始打卡时间
*/
@ApiModelProperty(value = "开始打卡时间")
@TableField(value = "dk_ks_sj")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date dkKsSj;
/**
* 开始打卡附件
*/
@ApiModelProperty(value = "开始打卡附件")
@TableField(value = "dk_ks_fj")
private String dkKsFj;
/**
* 开始打卡经度
*/
@ApiModelProperty(value = "开始打卡经度")
@TableField(value = "dk_ks_jd")
private BigDecimal dkKsJd;
/**
* 开始打卡纬度
*/
@ApiModelProperty(value = "开始打卡纬度")
@TableField(value = "dk_ks_wd")
private BigDecimal dkKsWd;
/**
* 结束打卡时间
*/
@ApiModelProperty(value = "结束打卡时间")
@TableField(value = "dk_js_sj")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date dkJsSj;
/**
* 结束打卡附件
*/
@ApiModelProperty(value = "结束打卡附件")
@TableField(value = "dk_js_fj")
private String dkJsFj;
/**
* 结束打卡经度
*/
@ApiModelProperty(value = "结束打卡经度")
@TableField(value = "dk_js_jd")
private BigDecimal dkJsJd;
/**
* 结束打卡纬度
*/
@ApiModelProperty(value = "结束打卡纬度")
@TableField(value = "dk_js_wd")
private BigDecimal dkJsWd;
/**
* 打卡顺序
*/
@ApiModelProperty(value = "打卡顺序")
@TableField(value = "dk_sx")
private Integer dkSx;
/**
* 打卡人姓名
*/
@ApiModelProperty(value = "打卡人姓名")
@TableField(value = "dkr_xm")
private String dkrXm;
/**
* 打卡人身份证号
*/
@ApiModelProperty(value = "打卡人身份证号")
@TableField(value = "dkr_sfzh")
private String dkrSfzh;
/**
* 所属部门id
*/
@ApiModelProperty(value = "所属部门id")
@TableField(value = "ssbmid")
private String ssbmid;
/**
* 所属部门
*/
@ApiModelProperty(value = "所属部门")
@TableField(value = "ssbm")
private String ssbm;
/**
* 所属部门代码
*/
@ApiModelProperty(value = "所属部门代码")
@TableField(value = "ssbmdm")
private String ssbmdm;
/**
* 所属县公安局
*/
@ApiModelProperty(value = "所属县公安局")
@TableField(value = "ssxgaj")
private String ssxgaj;
/**
* 所属县公安局id
*/
@ApiModelProperty(value = "所属县公安局id")
@TableField(value = "ssxgajid")
private String ssxgajid;
/**
* 所属县公安局代码
*/
@ApiModelProperty(value = "所属县公安局代码")
@TableField(value = "ssxgajdm")
private String ssxgajdm;
/**
* 所属市公安局id
*/
@ApiModelProperty(value = "所属市公安局id")
@TableField(value = "sssgajid")
private String sssgajid;
/**
* 所属市公安局
*/
@ApiModelProperty(value = "所属市公安局")
@TableField(value = "sssgaj")
private String sssgaj;
/**
* 所属市公安局代码
*/
@ApiModelProperty(value = "所属市公安局代码")
@TableField(value = "sssgajdm")
private String sssgajdm;
/**
* 主键ID字段名
*/
public static String ID_FIELD = "id";
/**
* 必到点巡逻任务ID字段名
*/
public static String BDDXLRW_ID_FIELD = "bddxlrw_id";
/**
* 开始打卡时间字段名
*/
public static String DK_KS_SJ_FIELD = "dk_ks_sj";
/**
* 开始打卡附件字段名
*/
public static String DK_KS_FJ_FIELD = "dk_ks_fj";
/**
* 开始打卡经度字段名
*/
public static String DK_KS_JD_FIELD = "dk_ks_jd";
/**
* 开始打卡纬度字段名
*/
public static String DK_KS_WD_FIELD = "dk_ks_wd";
/**
* 结束打卡时间字段名
*/
public static String DK_JS_SJ_FIELD = "dk_js_sj";
/**
* 结束打卡附件字段名
*/
public static String DK_JS_FJ_FIELD = "dk_js_fj";
/**
* 结束打卡经度字段名
*/
public static String DK_JS_JD_FIELD = "dk_js_jd";
/**
* 结束打卡纬度字段名
*/
public static String DK_JS_WD_FIELD = "dk_js_wd";
/**
* 打卡顺序字段名
*/
public static String DK_SX_FIELD = "dk_sx";
/**
* 打卡人姓名字段名
*/
public static String DKR_XM_FIELD = "dkr_xm";
/**
* 打卡人身份证号字段名
*/
public static String DKR_SFZH_FIELD = "dkr_sfzh";
/**
* 所属部门id
*/
public static String SSBMID_TYPE = "ssbmid";
/**
* 所属部门
*/
public static String SSBM_TYPE = "ssbm";
/**
* 所属部门代码
*/
public static String SSBMDM_TYPE = "ssbmdm";
/**
* 所属县公安局
*/
public static String SSXGAJ_TYPE = "ssxgaj";
/**
* 所属县公安局id
*/
public static String SSXGAJID_TYPE = "ssxgajid";
/**
* 所属县公安局代码
*/
public static String SSXGAJDM_TYPE = "ssxgajdm";
/**
* 所属市公安局id
*/
public static String SSSGAJID_TYPE = "sssgajid";
/**
* 所属市公安局
*/
public static String SSSGAJ_TYPE = "sssgaj";
/**
* 所属市公安局代码
*/
public static String SSSGAJDM_TYPE = "sssgajdm";
}

View File

@ -0,0 +1,214 @@
package com.mosty.base.model.entity.yjzl.zddw;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.mosty.base.model.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* @author zhangzhao
* @description 指导巡逻方格默认配置表
* @modifier zhangzhao
* @modifiedTime 2025/09/05 18:50
* @since 2025/09/05 18:50
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("tb_zdxl_fgmrpz")
@ApiModel(value = "TbZdxlFgmrpz对象", description = "指导巡逻方格默认配置表")
public class TbZdxlFgmrpz extends BaseEntity implements Serializable, Cloneable {
@TableField(exist = false)
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ApiModelProperty(value = "主键ID")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
/**
* 盘查车辆
*/
@ApiModelProperty(value = "盘查车辆")
@TableField(value = "pc_cl")
private Integer pcCl;
/**
* 盘查人员
*/
@ApiModelProperty(value = "盘查人员")
@TableField(value = "pc_ry")
private Integer pcRy;
/**
* 巡逻时长(分钟)
*/
@ApiModelProperty(value = "巡逻时长(分钟)")
@TableField(value = "xl_sc")
private Double xlSc;
/**
* 巡逻里程(公里)
*/
@ApiModelProperty(value = "巡逻里程(公里)")
@TableField(value = "xl_lc")
private Double xlLc;
/**
* 方格打卡次数
*/
@ApiModelProperty(value = "方格打卡次数")
@TableField(value = "fg_dkcs")
private Integer fgDkcs;
/**
* 所属部门id
*/
@ApiModelProperty(value = "所属部门id")
@TableField(value = "ssbmid")
private String ssbmid;
/**
* 报备部门
*/
@ApiModelProperty(value = "报备部门")
@TableField(value = "ssbm")
private String ssbm;
/**
* 报备部门代码
*/
@ApiModelProperty(value = "报备部门代码")
@TableField(value = "ssbmdm")
private String ssbmdm;
/**
* 所属县公安局
*/
@ApiModelProperty(value = "所属县公安局")
@TableField(value = "ssxgaj")
private String ssxgaj;
/**
* 所属县公安局id
*/
@ApiModelProperty(value = "所属县公安局id")
@TableField(value = "ssxgajid")
private String ssxgajid;
/**
* 所属县公安局代码
*/
@ApiModelProperty(value = "所属县公安局代码")
@TableField(value = "ssxgajdm")
private String ssxgajdm;
/**
* 所属市公安局id
*/
@ApiModelProperty(value = "所属市公安局id")
@TableField(value = "sssgajid")
private String sssgajid;
/**
* 所属市公安局
*/
@ApiModelProperty(value = "所属市公安局")
@TableField(value = "sssgaj")
private String sssgaj;
/**
* 所属市公安局代码
*/
@ApiModelProperty(value = "所属市公安局代码")
@TableField(value = "sssgajdm")
private String sssgajdm;
/**
* 主键ID字段名
*/
public static String ID_FIELD = "id";
/**
* 盘查车辆字段名
*/
public static String PC_CL_FIELD = "pc_cl";
/**
* 盘查人员字段名
*/
public static String PC_RY_FIELD = "pc_ry";
/**
* 巡逻时长(分钟)字段名
*/
public static String XL_SC_FIELD = "xl_sc";
/**
* 巡逻里程(公里)字段名
*/
public static String XL_LC_FIELD = "xl_lc";
/**
* 方格打卡次数字段名
*/
public static String FG_DKCS_FIELD = "fg_dkcs";
/**
* 所属部门id
*/
public static String SSBMID_TYPE = "ssbmid";
/**
* 所属部门
*/
public static String SSBM_TYPE = "ssbm";
/**
* 所属部门代码
*/
public static String SSBMDM_TYPE = "ssbmdm";
/**
* 所属县公安局
*/
public static String SSXGAJ_TYPE = "ssxgaj";
/**
* 所属县公安局id
*/
public static String SSXGAJID_TYPE = "ssxgajid";
/**
* 所属县公安局代码
*/
public static String SSXGAJDM_TYPE = "ssxgajdm";
/**
* 所属市公安局id
*/
public static String SSSGAJID_TYPE = "sssgajid";
/**
* 所属市公安局
*/
public static String SSSGAJ_TYPE = "sssgaj";
/**
* 所属市公安局代码
*/
public static String SSSGAJDM_TYPE = "sssgajdm";
}

View File

@ -48,7 +48,7 @@ public class TbZdxlFgxlrw extends BaseEntity implements Serializable, Cloneable
@ApiModelProperty(value = "方格ID")
@TableField(value = "fg_id")
@Excel(name = "方格ID", sort = 2, cellType = Excel.ColumnType.NUMERIC)
private Integer fgId;
private Long fgId;
/**
* 方格排序
@ -157,7 +157,7 @@ public class TbZdxlFgxlrw extends BaseEntity implements Serializable, Cloneable
@TableField(value = "xlgh_sj_js")
@JsonFormat(pattern = "HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "HH:mm:ss")
@Excel(name = "巡逻规划开始时间", sort = 15, dateFormat = "HH:mm:ss")
@Excel(name = "巡逻规划结束时间", sort = 15, dateFormat = "HH:mm:ss")
private Date xlghSjJs;
/**
@ -168,6 +168,20 @@ public class TbZdxlFgxlrw extends BaseEntity implements Serializable, Cloneable
@Excel(name = "巡逻规划巡逻里程(公里)", sort = 16, cellType = Excel.ColumnType.NUMERIC)
private Double xlghXllc;
/**
* 巡逻规划盘查车辆
*/
@ApiModelProperty(value = "巡逻规划盘查车辆")
@TableField(value = "xlgh_pc_cl")
private Integer xlghPcCl;
/**
* 巡逻规划盘查人员
*/
@ApiModelProperty(value = "巡逻规划盘查人员")
@TableField(value = "xlgh_pc_ry")
private Integer xlghPcRy;
/**
* 巡逻实际时长(分钟)
*/
@ -202,6 +216,27 @@ public class TbZdxlFgxlrw extends BaseEntity implements Serializable, Cloneable
@Excel(name = "巡逻实际巡逻里程(公里)", sort = 20, cellType = Excel.ColumnType.NUMERIC)
private Double xlsjXllc;
/**
* 巡逻实际盘查车辆
*/
@ApiModelProperty(value = "巡逻实际盘查车辆")
@TableField(value = "xlsj_pc_cl")
private Integer xlsjPcCl;
/**
* 巡逻实际盘查人员
*/
@ApiModelProperty(value = "巡逻实际盘查人员")
@TableField(value = "xlsj_pc_ry")
private Integer xlsjPcRy;
/**
* 巡防报备ID
*/
@ApiModelProperty(value = "巡防报备ID")
@TableField(value = "xfbb_id")
private String xfbbId;
/**
* 主键ID字段名
@ -283,6 +318,16 @@ public class TbZdxlFgxlrw extends BaseEntity implements Serializable, Cloneable
*/
public static String XLGH_XLLC_FIELD = "xlgh_xllc";
/**
* 巡逻规划盘查车辆字段名
*/
public static String XLGH_PC_CL_FIELD = "xlgh_pc_cl";
/**
* 巡逻规划盘查人员字段名
*/
public static String XLGH_PC_RY_FIELD = "xlgh_pc_ry";
/**
* 巡逻实际时长字段名
*/
@ -303,4 +348,19 @@ public class TbZdxlFgxlrw extends BaseEntity implements Serializable, Cloneable
*/
public static String XLSJ_XLLC_FIELD = "xlsj_xllc";
/**
* 巡逻实际盘查车辆字段名
*/
public static String XLSJ_PC_CL_FIELD = "xlsj_pc_cl";
/**
* 巡逻实际盘查人员字段名
*/
public static String XLSJ_PC_RY_FIELD = "xlsj_pc_ry";
/**
* 巡防报备ID字段名
*/
public static String XFBB_ID_FIELD = "xfbb_id";
}

View File

@ -0,0 +1,41 @@
package com.mosty.base.model.query.yjzl;
import com.mosty.base.model.BasePage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @author zhangzhao
* @description 指导巡逻方格点位必到点表查询对象
* @modifier zhangzhao
* @modifiedTime 2025/09/06 14:44
* @since 2025/09/06 14:44
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "TbZdxlFgdwBddQuery对象", description = "指导巡逻方格点位必到点表查询对象")
public class TbZdxlFgdwBddQuery extends BasePage {
/**
* 方格点位ID
*/
@ApiModelProperty(value = "方格点位ID")
private Long fgdwId;
/**
* 必到点名称
*/
@ApiModelProperty(value = "必到点名称")
private String bddMc;
/**
* 必到点地址
*/
@ApiModelProperty(value = "必到点地址")
private String bddDz;
}

View File

@ -0,0 +1,29 @@
package com.mosty.base.model.query.yjzl;
import com.mosty.base.model.BasePage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @author zhangzhao
* @description 指导巡逻方格点位查询对象
* @modifier zhangzhao
* @modifiedTime 2025/09/07 16:20
* @since 2025/09/07 16:20
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "TbZdxlFgdwQuery对象", description = "指导巡逻方格点位查询对象")
public class TbZdxlFgdwQuery extends BasePage {
/**
* 名称
*/
@ApiModelProperty(value = "名称")
private String mc;
}

View File

@ -1,6 +1,5 @@
package com.mosty.base.model.query.yjzl;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mosty.base.model.BasePage;
import io.swagger.annotations.ApiModel;
@ -29,9 +28,20 @@ public class TbZdxlFgxlrwQuery extends BasePage {
* 方格ID
*/
@ApiModelProperty(value = "方格ID")
@TableField(value = "fg_id")
private Integer fgId;
/**
* 方格名称
*/
@ApiModelProperty(value = "方格名称")
private String fgMc;
/**
* 方格预警等级 D_ZDXL_FGXLRW_YJDJ
*/
@ApiModelProperty(value = "方格预警等级 D_ZDXL_FGXLRW_YJDJ")
private String fgYjdj;
/**
* 任务日期
*/

View File

@ -0,0 +1,29 @@
package com.mosty.base.model.vo.yjzl;
import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgdwBdd;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @author zhangzhao
* @description 指导巡逻方格点位必到点返回对象
* @modifier zhangzhao
* @modifiedTime 2025/09/07 16:00
* @since 2025/09/07 16:00
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "TbZdxlFgdwBddVO对象", description = "指导巡逻方格点位必到点返回对象")
public class TbZdxlFgdwBddVO extends TbZdxlFgdwBdd {
/**
* 方格点位名称
*/
@ApiModelProperty(value = "方格点位名称")
private String fgdwMc;
}

View File

@ -0,0 +1,37 @@
package com.mosty.base.model.vo.yjzl;
import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgdwBddxlrw;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
/**
* @author zhangzhao
* @description 指导巡逻方格点位必到点巡逻任务表返回对象
* @modifier zhangzhao
* @modifiedTime 2025/09/06 19:56
* @since 2025/09/06 19:56
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "TbZdxlFgdwBddxlrwVO对象", description = "指导巡逻方格点位必到点巡逻任务表返回对象")
public class TbZdxlFgdwBddxlrwVO extends TbZdxlFgdwBddxlrw {
/**
* 必到点名称
*/
@ApiModelProperty(value = "必到点名称")
private String bddMc;
/**
* 必到点进度
*/
@ApiModelProperty(value = "必到点进度")
private Double bddProgress;
}

View File

@ -1,5 +1,6 @@
package com.mosty.base.model.vo.yjzl;
import com.mosty.base.model.dto.qwzx.TbQwXfbbVo;
import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgxlrw;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -8,6 +9,7 @@ import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.util.List;
/**
* @author zhangzhao
@ -26,7 +28,7 @@ public class TbZdxlFgxlrwVO extends TbZdxlFgxlrw {
* 名称
*/
@ApiModelProperty(value = "名称")
private String mc;
private String fgMc;
/**
* 网格坐标X1
@ -64,4 +66,22 @@ public class TbZdxlFgxlrwVO extends TbZdxlFgxlrw {
@ApiModelProperty(value = "中心Y")
private BigDecimal zxY;
/**
* 必到点列表
*/
@ApiModelProperty(value = "必到点列表")
List<TbZdxlFgdwBddxlrwVO> bddList;
/**
* 必到点总进度
*/
@ApiModelProperty(value = "必到点总进度")
private Double bddAllProgress;
/**
* 巡防报备信息
*/
@ApiModelProperty(value = "巡防报备信息")
private TbQwXfbbVo xfbb;
}

View File

@ -4,10 +4,9 @@ import com.mosty.common.base.exception.BusinessException;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.builder.BuilderException;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.Point;
import org.locationtech.jts.geom.Polygon;
import org.locationtech.jts.algorithm.PointLocator;
import org.locationtech.jts.geom.*;
import org.locationtech.jts.operation.buffer.BufferOp;
import org.springframework.web.multipart.MultipartFile;
import sun.misc.BASE64Encoder;
@ -150,11 +149,32 @@ public class Kit {
}
/**
* 判断点在范围内
*
* @param coordinates
* @param isPoint
* @return
* 判断点在线的范围内(缓冲区法)
* @param coordinates 线坐标
* @param isPoint 点位
* @return 是否在范围内
*/
public static boolean isInLineGeometry(Coordinate[] coordinates, String isPoint) {
String[] sp = isPoint.split(",");
double xx = Double.parseDouble(sp[0]);
double yy = Double.parseDouble(sp[1]);
//点是否在多边形内判断
Coordinate point = new Coordinate(xx, yy);
PointLocator a = new PointLocator();
GeometryFactory gf = new GeometryFactory();
Geometry gfLineString = gf.createLineString(coordinates);
double degree = 500 / (2 * Math.PI * 6371004) * 360;
BufferOp bufOp = new BufferOp(gfLineString);
bufOp.setEndCapStyle(BufferOp.CAP_BUTT);
Geometry bg = bufOp.getResultGeometry(degree);
return a.intersects(point, bg);
}
/**
* 判断点在范围内(缓冲区法)(不推荐)
* @param coordinates 范围边界
* @param isPoint 点位
* @return 是否在范围内
*/
public static boolean isInGeometry(Coordinate[] coordinates, String isPoint) {
if (coordinates[0].x != coordinates[coordinates.length - 1].x || coordinates[0].y != coordinates[coordinates.length - 1].y) {
@ -164,14 +184,59 @@ public class Kit {
double xx = Double.parseDouble(sp[0]);
double yy = Double.parseDouble(sp[1]);
//点是否在多边形内判断
Coordinate coordinate = new Coordinate(xx, yy);
Coordinate point = new Coordinate(xx, yy);
PointLocator a = new PointLocator();
GeometryFactory gf = new GeometryFactory();
Point point = gf.createPoint(coordinate);
Polygon polygon = gf.createPolygon(coordinates);
if (point.within(polygon) || point.intersects(polygon)) {
return true;
Geometry gfLineString = gf.createPolygon(coordinates);
double degree = 500 / (2 * Math.PI * 6371004) * 360;
BufferOp bufOp = new BufferOp(gfLineString);
bufOp.setEndCapStyle(BufferOp.CAP_BUTT);
Geometry bg = bufOp.getResultGeometry(degree);
return a.intersects(point, bg);
}
/**
* 判断点在范围内(射线法)(推荐)
* @param coordinates 范围边界
* @param isPoint 点位
* @return 是否在范围内
*/
public static boolean isInGeometryByRay(Coordinate[] coordinates, String isPoint){
if(StringUtils.isBlank(isPoint) || coordinates == null || coordinates.length <= 0){
return false;
}
return false;
int count = 0;
int length = coordinates.length;
String[] sp = isPoint.split(",");
double pointX = Double.parseDouble(sp[0]);
double pointY = Double.parseDouble(sp[1]);
for(int i = 0 ; i < length ; i++){
Coordinate c1 = coordinates[i];
Coordinate c2 = coordinates[(i + 1) % length];
if(c1.x == pointX && c1.y == pointY){
return true;
}
if(c1.y == c2.y){
continue;
}
if(pointY < Math.min(c1.y, c2.y)){
continue;
}
if(pointY >= Math.max(c1.y, c2.y)){
continue;
}
double x = (pointY - c1.y) * (c2.x - c1.x) / (c2.y - c1.y) + c1.x;
if(x > pointX){
count++;
}else if(x == pointX){
return true;
}
}
return count % 2 == 1;
}
// 检查经纬度是否合法

View File

@ -0,0 +1,381 @@
package com.mosty.base.utils;
import org.apache.commons.lang3.ObjectUtils;
import java.math.BigDecimal;
/**
* @author zhangzhao
* @description 数学计算工具类
* @modifier zhangzhao
* @modifiedTime 2024/01/02 11:33
* @since 2024/01/02 11:33
*/
public class MathUtils {
/**
* 默认除法运算精度
*/
private static final int DEF_DIV_SCALE = 10;
/**
* 计算百分比数值(小数点后两位)
* @param sl 数量
* @param zs 总数
* @return 百分比数值
*/
public static Double percentage(int sl, int zs){
if(sl == 0 || zs == 0){
return 0.0;
}
return MathUtils.percentage(new BigDecimal(sl + ""), new BigDecimal(zs + ""));
}
/**
* 计算百分比数值(小数点后两位)
* @param sl 数量
* @param zs 总数
* @return 百分比数值
*/
public static Double percentage(BigDecimal sl, BigDecimal zs){
if(ObjectUtils.isEmpty(sl) || ObjectUtils.isEmpty(zs) || sl.compareTo(BigDecimal.ZERO) == 0 || zs.compareTo(BigDecimal.ZERO) == 0){
return 0.0;
}
return Double.parseDouble(
sl.divide(zs, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")).toString()
);
}
/**
* 提供精确的加法运算
*
* @param v1 被加数
* @param v2 加数
* @return 两个参数的和
*/
public static double add(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.add(b2).doubleValue();
}
/**
* 提供精确的加法运算
*
* @param v1 被加数
* @param v2 加数
* @return 两个参数的和
*/
public static BigDecimal add(String v1, String v2) {
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.add(b2);
}
/**
* 提供精确的加法运算
*
* @param v1 被加数
* @param v2 加数
* @param scale 保留scale 位小数
* @return 两个参数的和
*/
public static String add(String v1, String v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.add(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
}
/**
* 提供精确的减法运算
*
* @param v1 被减数
* @param v2 减数
* @return 两个参数的差
*/
public static double sub(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.subtract(b2).doubleValue();
}
/**
* 提供精确的减法运算。
*
* @param v1 被减数
* @param v2 减数
* @return 两个参数的差
*/
public static BigDecimal sub(String v1, String v2) {
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.subtract(b2);
}
/**
* 提供精确的减法运算。
*
* @param b1 被减数
* @param b2 减数
* @param scale 精度
* @param roundingMode 舍入模式
* @return 两个参数的差
*/
public static BigDecimal sub(BigDecimal b1, BigDecimal b2, int scale, int roundingMode){
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
if (roundingMode < 0 || roundingMode > 7) {
throw new IllegalArgumentException("roundingMode must in BigDecimal Rounding Modes");
}
return b1.subtract(b2).setScale(scale, roundingMode);
}
/**
* 提供精确的减法运算
*
* @param v1 被减数
* @param v2 减数
* @param scale 保留scale 位小数
* @return 两个参数的差
*/
public static String sub(String v1, String v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException( "The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.subtract(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
}
/**
* 提供精确的乘法运算
*
* @param v1 被乘数
* @param v2 乘数
* @return 两个参数的积
*/
public static double mul(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.multiply(b2).doubleValue();
}
/**
* 提供精确的乘法运算
*
* @param v1 被乘数
* @param v2 乘数
* @return 两个参数的积
*/
public static BigDecimal mul(String v1, String v2) {
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.multiply(b2);
}
/**
* 提供精确的乘法运算
*
* @param v1 被乘数
* @param v2 乘数
* @param scale 保留scale 位小数
* @return 两个参数的积
*/
public static double mul(double v1, double v2, int scale) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return round(b1.multiply(b2).doubleValue(), scale);
}
/**
* 提供BigDecimal乘法
* @param b1 被乘数
* @param b2 乘数
* @param scale 精度
* @param roundingMode 舍入模式
* @return 两个参数的积
*/
public static BigDecimal mul(BigDecimal b1, BigDecimal b2, int scale, int roundingMode){
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
if (roundingMode < 0 || roundingMode > 7) {
throw new IllegalArgumentException("roundingMode must in BigDecimal Rounding Modes");
}
if(b1 == null || b2 == null){
return BigDecimal.ZERO;
}
return b1.multiply(b2).setScale(scale, roundingMode);
}
/**
* 提供精确的乘法运算
*
* @param v1 被乘数
* @param v2 乘数
* @param scale 保留scale 位小数
* @return 两个参数的积
*/
public static String mul(String v1, String v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException( "The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.multiply(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
}
/**
* 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到
* 小数点以后10位以后的数字四舍五入
*
* @param v1 被除数
* @param v2 除数
* @return 两个参数的商
*/
public static double div(double v1, double v2) {
return div(v1, v2, DEF_DIV_SCALE);
}
/**
* 提供相对精确的除法运算。当发生除不尽的情况时由scale参数指
* 定精度,以后的数字四舍五入
*
* @param v1 被除数
* @param v2 除数
* @param scale 表示表示需要精确到小数点以后几位。
* @return 两个参数的商
*/
public static double div(double v1, double v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 提供相对精确的除法运算。当发生除不尽的情况时由scale参数指
* 定精度,以后的数字四舍五入
*
* @param v1 被除数
* @param v2 除数
* @param scale 表示需要精确到小数点以后几位
* @return 两个参数的商
*/
public static String div(String v1, String v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v1);
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).toString();
}
/**
* 提供相对精确的BigDecimal除法运算。当发生除不尽的情况时由scale参数指
* @param b1 被除数
* @param b2 除数
* @param scale 表示需要精确到小数点以后几位
* @param roundingMode 舍入模式
* @return 两个参数的商
*/
public static BigDecimal div(BigDecimal b1, BigDecimal b2, int scale, int roundingMode) {
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
if (roundingMode < 0 || roundingMode > 7) {
throw new IllegalArgumentException("roundingMode must in BigDecimal Rounding Modes");
}
if(b1 == null || b2 == null){
return BigDecimal.ZERO;
}
return b1.divide(b2, scale, roundingMode);
}
/**
* 提供精确的小数位四舍五入处理
*
* @param v 需要四舍五入的数字
* @param scale 小数点后保留几位
* @return 四舍五入后的结果
*/
public static double round(double v, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(Double.toString(v));
return b.setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 提供精确的小数位四舍五入处理
*
* @param v 需要四舍五入的数字
* @param scale 小数点后保留几位
* @return 四舍五入后的结果
*/
public static String round(String v, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(v);
return b.setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
}
/**
* 取余数
*
* @param v1 被除数
* @param v2 除数
* @param scale 小数点后保留几位
* @return 余数
*/
public static String remainder(String v1, String v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.remainder(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
}
/**
* 取余数 BigDecimal
*
* @param v1 被除数
* @param v2 除数
* @param scale 小数点后保留几位
* @return 余数
*/
public static BigDecimal remainder(BigDecimal v1, BigDecimal v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
return v1.remainder(v2).setScale(scale, BigDecimal.ROUND_HALF_UP);
}
/**
* 比较大小
*
* @param v1 被比较数
* @param v2 比较数
* @return 如果v1 大于v2 则 返回true 否则false
*/
public static boolean compare(String v1, String v2) {
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
int bj = b1.compareTo(b2);
boolean res;
res = bj > 0;
return res;
}
}

View File

@ -161,4 +161,19 @@ zdxl.fgxlrw.rwRq.xlghSc.notNull=【巡逻规划时长】不能为空
zdxl.fgxlrw.rwRq.xlghSjKs.notNull=【巡逻规划开始时间】不能为空
zdxl.fgxlrw.rwRq.xlghSjJs.notNull=【巡逻规划结束时间】不能为空
zdxl.fgxlrw.rwRq.xlghXllc.notNull=【巡逻规划巡逻里程】不能为空
zdxl.fgxlrw.rwRq.export.queryNull=当日没有生成任务,请生成后再下载
zdxl.fgxlrw.rwRq.export.queryNull=当日没有生成任务,请生成后再下载
#指导巡逻-方格点位必到点
zdxl.fgdwBdd.fgdwId.notNull=请选择【方格点位】
zdxl.fgdwBdd.bddMc.notBlank=【必到点名称】不能为空
zdxl.fgdwBdd.bddMc.size=【必到点名称】不能超过64位
zdxl.fgdwBdd.bddDz.size=【必到点地址】不能超过255位
zdxl.fgdwBdd.bddSm.size=【必到点说明】不能超过128位
zdxl.fgdwBdd.jd.notNull=【经度】不能为空
zdxl.fgdwBdd.wd.notNull=【纬度】不能为空
#指导巡逻-方格点位必到点巡逻任务记录
zdxl.fgdwBdd.xlrwJl.dkFj.notBlank=【打卡附件】不能为空
zdxl.fgdwBdd.xlrwJl.dkFj.size=【打卡附件】不能超过64位
zdxl.fgdwBdd.xlrwJl.dkJd.notNull=【打卡经度】不能为空
zdxl.fgdwBdd.xlrwJl.dkWd.notNull=【打卡纬度】不能为空