diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/feign/remote/MostyQwzxFeignServiceRemote.java b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/feign/remote/MostyQwzxFeignServiceRemote.java new file mode 100644 index 0000000..c0b6d25 --- /dev/null +++ b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/feign/remote/MostyQwzxFeignServiceRemote.java @@ -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 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 responseResult = MostyQwzxFeignServiceRemote.getService().getMyXfbbTodayNew(bblx); + if (responseResult == null || !responseResult.isSuccess()) { + log.error("查询我今天的报备异常 responseResult = {}", JSON.toJSONString(responseResult)); + throw new BusinessException("查询我今天的报备异常"); + } + return responseResult.getData(); + } + +} diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/feign/service/MostyQwzxFeignService.java b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/feign/service/MostyQwzxFeignService.java index ae5ea5f..fa7dd6c 100644 --- a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/feign/service/MostyQwzxFeignService.java +++ b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/feign/service/MostyQwzxFeignService.java @@ -54,4 +54,12 @@ public interface MostyQwzxFeignService { // 查询部门时长、里程 @PostMapping("/mosty-qwzx/tbQwXfbb/getScLc") ResponseResult> getScLc(@RequestParam("ssbmdm") String ssbmdm, @RequestParam("time") String time); + + /** + * 查询我今天的报备new + * @param bblx 报备类型 + * @return 报备信息 + */ + @GetMapping("/mosty-qwzx/tbQwXfbb/getMybbTodayNew") + ResponseResult getMyXfbbTodayNew(@RequestParam String bblx); } diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/dto/yjzl/TbZdxlFgdwBddSaveDTO.java b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/dto/yjzl/TbZdxlFgdwBddSaveDTO.java new file mode 100644 index 0000000..a670aca --- /dev/null +++ b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/dto/yjzl/TbZdxlFgdwBddSaveDTO.java @@ -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; + +} diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/dto/yjzl/TbZdxlFgdwBddUpdateDTO.java b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/dto/yjzl/TbZdxlFgdwBddUpdateDTO.java new file mode 100644 index 0000000..d980d35 --- /dev/null +++ b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/dto/yjzl/TbZdxlFgdwBddUpdateDTO.java @@ -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; + +} diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/dto/yjzl/TbZdxlFgdwBddxlrwHandleDTO.java b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/dto/yjzl/TbZdxlFgdwBddxlrwHandleDTO.java new file mode 100644 index 0000000..8ef93dc --- /dev/null +++ b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/dto/yjzl/TbZdxlFgdwBddxlrwHandleDTO.java @@ -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; + +} diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/dto/yjzl/TbZdxlFgdwBddxlrwJlClockInDTO.java b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/dto/yjzl/TbZdxlFgdwBddxlrwJlClockInDTO.java new file mode 100644 index 0000000..c4bf7d5 --- /dev/null +++ b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/dto/yjzl/TbZdxlFgdwBddxlrwJlClockInDTO.java @@ -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; + +} diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/dto/yjzl/TbZdxlFgmrpzUpdateDTO.java b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/dto/yjzl/TbZdxlFgmrpzUpdateDTO.java new file mode 100644 index 0000000..cee1c3e --- /dev/null +++ b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/dto/yjzl/TbZdxlFgmrpzUpdateDTO.java @@ -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; + +} diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/dto/yjzl/TbZdxlFgxlrwIssueDTO.java b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/dto/yjzl/TbZdxlFgxlrwIssueDTO.java new file mode 100644 index 0000000..199f49d --- /dev/null +++ b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/dto/yjzl/TbZdxlFgxlrwIssueDTO.java @@ -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; + +} diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/dto/yjzl/TbZdxlFgxlrwJqpzUpdateDTO.java b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/dto/yjzl/TbZdxlFgxlrwJqpzUpdateDTO.java deleted file mode 100644 index 1d51606..0000000 --- a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/dto/yjzl/TbZdxlFgxlrwJqpzUpdateDTO.java +++ /dev/null @@ -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; - -} diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/dto/yjzl/TbZdxlFgxlrwUpdateDTO.java b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/dto/yjzl/TbZdxlFgxlrwUpdateDTO.java index b749c47..9de61c5 100644 --- a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/dto/yjzl/TbZdxlFgxlrwUpdateDTO.java +++ b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/dto/yjzl/TbZdxlFgxlrwUpdateDTO.java @@ -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 bddList; + } diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/entity/yjzl/zddw/TbZdxlFgdw.java b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/entity/yjzl/zddw/TbZdxlFgdw.java index 8522c1e..aee241b 100644 --- a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/entity/yjzl/zddw/TbZdxlFgdw.java +++ b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/entity/yjzl/zddw/TbZdxlFgdw.java @@ -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"; diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/entity/yjzl/zddw/TbZdxlFgdwBdd.java b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/entity/yjzl/zddw/TbZdxlFgdwBdd.java new file mode 100644 index 0000000..ee6d41b --- /dev/null +++ b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/entity/yjzl/zddw/TbZdxlFgdwBdd.java @@ -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"; + +} diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/entity/yjzl/zddw/TbZdxlFgdwBddxlrw.java b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/entity/yjzl/zddw/TbZdxlFgdwBddxlrw.java new file mode 100644 index 0000000..62ba1b9 --- /dev/null +++ b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/entity/yjzl/zddw/TbZdxlFgdwBddxlrw.java @@ -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"; + +} diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/entity/yjzl/zddw/TbZdxlFgdwBddxlrwJl.java b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/entity/yjzl/zddw/TbZdxlFgdwBddxlrwJl.java new file mode 100644 index 0000000..2e95543 --- /dev/null +++ b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/entity/yjzl/zddw/TbZdxlFgdwBddxlrwJl.java @@ -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"; + +} diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/entity/yjzl/zddw/TbZdxlFgmrpz.java b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/entity/yjzl/zddw/TbZdxlFgmrpz.java new file mode 100644 index 0000000..e1645f3 --- /dev/null +++ b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/entity/yjzl/zddw/TbZdxlFgmrpz.java @@ -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"; + +} diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/entity/yjzl/zddw/TbZdxlFgxlrw.java b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/entity/yjzl/zddw/TbZdxlFgxlrw.java index aa6545e..0cac2f8 100644 --- a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/entity/yjzl/zddw/TbZdxlFgxlrw.java +++ b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/entity/yjzl/zddw/TbZdxlFgxlrw.java @@ -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"; + } diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/query/yjzl/TbZdxlFgdwBddQuery.java b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/query/yjzl/TbZdxlFgdwBddQuery.java new file mode 100644 index 0000000..d700fe6 --- /dev/null +++ b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/query/yjzl/TbZdxlFgdwBddQuery.java @@ -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; + +} diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/query/yjzl/TbZdxlFgdwQuery.java b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/query/yjzl/TbZdxlFgdwQuery.java new file mode 100644 index 0000000..61f3758 --- /dev/null +++ b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/query/yjzl/TbZdxlFgdwQuery.java @@ -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; + +} diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/query/yjzl/TbZdxlFgxlrwQuery.java b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/query/yjzl/TbZdxlFgxlrwQuery.java index ab8486e..4725d75 100644 --- a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/query/yjzl/TbZdxlFgxlrwQuery.java +++ b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/query/yjzl/TbZdxlFgxlrwQuery.java @@ -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; + /** * 任务日期 */ diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/vo/yjzl/TbZdxlFgdwBddVO.java b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/vo/yjzl/TbZdxlFgdwBddVO.java new file mode 100644 index 0000000..f0f1e34 --- /dev/null +++ b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/vo/yjzl/TbZdxlFgdwBddVO.java @@ -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; + +} diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/vo/yjzl/TbZdxlFgdwBddxlrwVO.java b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/vo/yjzl/TbZdxlFgdwBddxlrwVO.java new file mode 100644 index 0000000..58c96b2 --- /dev/null +++ b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/vo/yjzl/TbZdxlFgdwBddxlrwVO.java @@ -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; + +} diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/vo/yjzl/TbZdxlFgxlrwVO.java b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/vo/yjzl/TbZdxlFgxlrwVO.java index e21467d..d2909fe 100644 --- a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/vo/yjzl/TbZdxlFgxlrwVO.java +++ b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/model/vo/yjzl/TbZdxlFgxlrwVO.java @@ -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 bddList; + + /** + * 必到点总进度 + */ + @ApiModelProperty(value = "必到点总进度") + private Double bddAllProgress; + + /** + * 巡防报备信息 + */ + @ApiModelProperty(value = "巡防报备信息") + private TbQwXfbbVo xfbb; + } diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/utils/DatePlusUtils.java b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/utils/DatePlusUtils.java new file mode 100644 index 0000000..ac2a5a5 --- /dev/null +++ b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/utils/DatePlusUtils.java @@ -0,0 +1,1310 @@ +package com.mosty.base.utils; + +import com.mosty.common.base.exception.BusinessException; +import com.mosty.common.base.util.StringUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +/** + * @author zhangzhao + * @description 时间扩展工具类 + * @modifier zhangzhao + * @modifiedTime 2023/10/27 9:43 + * @since 2023/10/27 9:43 + */ +@Slf4j +public class DatePlusUtils { + + /** + * 数量-每天的小时数 + */ + public static final int RADIX_HOUR_IN_DAY = 24; + + /** + * 数量-每小时分钟数 + */ + public static final int RADIX_MINUTE_IN_HOUR = 60; + + /** + * 数量-每分钟秒数 + */ + public static final int RADIX_SECOND_IN_MINUTE = 60; + + /** + * 数量-每秒毫秒数 + */ + public static final int RADIX_MILLISECOND_IN_SECOND = 1000; + + /** + * 数量-每天毫秒数(1000 * 60 * 60 * 24) + */ + public static final int RADIX_MILLISECOND_IN_DAY = RADIX_MILLISECOND_IN_SECOND * RADIX_SECOND_IN_MINUTE * RADIX_MINUTE_IN_HOUR * RADIX_HOUR_IN_DAY; + + /** + * 数量-每小时毫秒数(1000 * 60 * 60) + */ + public static final int RADIX_MILLISECOND_IN_HOUR = RADIX_MILLISECOND_IN_SECOND * RADIX_SECOND_IN_MINUTE * RADIX_MINUTE_IN_HOUR; + + /** + * 数量-每分钟毫秒数(1000 * 60) + */ + public static final int RADIX_MILLISECOND_IN_MINUTE = RADIX_MILLISECOND_IN_SECOND * RADIX_SECOND_IN_MINUTE; + + /** + * 每年开始日期 + */ + public static final String YEAR_START_DATE = "-01-01"; + + /** + * 每年结束日期 + */ + public static final String YEAR_END_DATE = "-12-31"; + + /** + * 每月开始日期 + */ + public static final String MONTH_START_DATE = "-01"; + + /** + * 每日开始时间 + */ + public static final String DAY_START_TIME = " 00:00:00"; + + /** + * 每日结束时间 + */ + public static final String DAY_END_TIME = " 23:59:59"; + + /** + * 小时开始时间 + */ + public static final String HOUR_START_TIME = ":00:00"; + + /** + * 小时结束时间 + */ + public static final String HOUR_END_TIME = ":59:59"; + + /** + * 下一日期参数-年数 + */ + public static final String NEXT_TYPE_YEAR = "Y"; + + /** + * 下一日期参数-月数 + */ + public static final String NEXT_TYPE_MONTH = "M"; + + /** + * 下一日期参数-天数 + */ + public static final String NEXT_TYPE_DAY = "D"; + + /** + * 下一日期参数-小时数 + */ + public static final String NEXT_TYPE_HOUR = "H"; + + /** + * 下一日期参数-分钟数 + */ + public static final String NEXT_TYPE_MINUTE = "m"; + + /** + * 下一日期参数-秒数 + */ + public static final String NEXT_TYPE_SECOND = "S"; + + /** + * 中文星期数组 + */ + public static String[] CHINESE_WEEKS_ARRAY = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; + + //-------------------------时间格式字符串-------------------------// + + /** + * 时间格式字符串-年份 + */ + public static final String FORMAT_YEAR = "yyyy"; + + /** + * 时间格式字符串-年份月份 + */ + public static final String FORMAT_YEAR_MONTH = "yyyy-MM"; + + /** + * 时间格式字符串-月份天数 + */ + public static final String FORMAT_MONTH_DAY = "MM-dd"; + + /** + * 时间格式字符串-日期 + */ + public static final String FORMAT_DATE = "yyyy-MM-dd"; + + /** + * 时间格式字符串-日期时间 + */ + public static final String FORMAT_DATE_TIME = "yyyy-MM-dd HH:mm:ss"; + + /** + * 时间格式字符串-日期小时 + */ + public static final String FORMAT_DATE_HOUR = "yyyy-MM-dd HH"; + + /** + * 时间格式字符串-日期分钟 + */ + public static final String FORMAT_DATE_MINUTE = "yyyy-MM-dd HH:mm"; + + /** + * 时间格式字符串-时间 + */ + public static final String FORMAT_TIME = "HH:mm:ss"; + + /** + * 时间格式字符串-分钟 + */ + public static final String FORMAT_MINUTE = "HH:mm"; + + /** + * 时间格式字符串-月份 + */ + public static final String FORMAT_MONTH = "MM"; + + /** + * 时间格式字符串-天数 + */ + public static final String FORMAT_DAY = "dd"; + + /** + * 时间格式字符串-小时 + */ + public static final String FORMAT_HOUR = "HH"; + + /** + * 时间格式字符串-日期-无间隔 + */ + public static final String FORMAT_DATE_COMPACT = "yyyyMMdd"; + + /** + * 时间格式字符串-日期时间-无间隔 + */ + public static final String FORMAT_DATE_TIME_COMPACT = "yyyyMMddHHmmss"; + + /** + * 时间格式字符串-日期小时-无间隔 + */ + public static final String FORMAT_DATE_HOUR_COMPACT = "yyyyMMddHH"; + + /** + * 时间格式字符串-日期分钟-无间隔 + */ + public static final String FORMAT_DATE_MINUTE_COMPACT = "yyyyMMddHHmm"; + + /** + * 时间格式字符串-日期时间戳-无间隔 + */ + public static final String FORMAT_DATE_TIME_STAMP_COMPACT = "yyyyMMddHHmmssSSS"; + + /** + * 时间格式字符串-月份天数-无间隔 + */ + public static final String FORMAT_MONTH_DAY_COMPACT = "MMdd"; + + //--------------------------时间格式化--------------------------// + + /** + * 时间格式化-年份(yyyy) + */ + public static final SimpleDateFormat FORMATTER_YEAR = new SimpleDateFormat(DatePlusUtils.FORMAT_YEAR); + + /** + * 时间格式化-年份月份(yyyy-MM) + */ + public static final SimpleDateFormat FORMATTER_YEAR_MONTH = new SimpleDateFormat(DatePlusUtils.FORMAT_YEAR_MONTH); + + /** + * 时间格式化-月份天数(MM-dd) + */ + public static final SimpleDateFormat FORMATTER_MONTH_DAY = new SimpleDateFormat(DatePlusUtils.FORMAT_MONTH_DAY); + + /** + * 时间格式化-日期(yyyy-MM-dd) + */ + public static final SimpleDateFormat FORMATTER_DATE = new SimpleDateFormat(DatePlusUtils.FORMAT_DATE); + + /** + * 时间格式化-日期时间(yyyy-MM-dd HH:mm:ss) + */ + public static final SimpleDateFormat FORMATTER_DATE_TIME = new SimpleDateFormat(DatePlusUtils.FORMAT_DATE_TIME); + + /** + * 时间格式化-日期小时(yyyy-MM-dd HH) + */ + public static final SimpleDateFormat FORMATTER_DATE_HOUR = new SimpleDateFormat(DatePlusUtils.FORMAT_DATE_HOUR); + + /** + * 时间格式化-日期分钟(yyyy-MM-dd HH:mm) + */ + public static final SimpleDateFormat FORMATTER_DATE_MINUTE = new SimpleDateFormat(DatePlusUtils.FORMAT_DATE_MINUTE); + + /** + * 时间格式化-时间(HH:mm:ss) + */ + public static final SimpleDateFormat FORMATTER_TIME = new SimpleDateFormat(DatePlusUtils.FORMAT_TIME); + + /** + * 时间格式化-分钟(HH:mm) + */ + public static final SimpleDateFormat FORMATTER_MINUTE = new SimpleDateFormat(DatePlusUtils.FORMAT_MINUTE); + + /** + * 时间格式化-月份(MM) + */ + public static final SimpleDateFormat FORMATTER_MONTH = new SimpleDateFormat(DatePlusUtils.FORMAT_MONTH); + + /** + * 时间格式化-天数(dd) + */ + public static final SimpleDateFormat FORMATTER_DAY = new SimpleDateFormat(DatePlusUtils.FORMAT_DAY); + + /** + * 时间格式化-小时(HH) + */ + public static final SimpleDateFormat FORMATTER_HOUR = new SimpleDateFormat(DatePlusUtils.FORMAT_HOUR); + + /** + * 时间格式化-日期时间-无间隔(yyyyMMdd) + */ + public static final SimpleDateFormat FORMATTER_DATE_COMPACT = new SimpleDateFormat(DatePlusUtils.FORMAT_DATE_COMPACT); + + /** + * 时间格式化-日期时间-无间隔(yyyyMMddHHmmss) + */ + public static final SimpleDateFormat FORMATTER_DATE_TIME_COMPACT = new SimpleDateFormat(DatePlusUtils.FORMAT_DATE_TIME_COMPACT); + + /** + * 时间格式化-日期小时-无间隔(yyyyMMddHH) + */ + public static final SimpleDateFormat FORMATTER_DATE_HOUR_COMPACT = new SimpleDateFormat(DatePlusUtils.FORMAT_DATE_HOUR_COMPACT); + + /** + * 时间格式化-日期分钟-无间隔(yyyyMMddHHmm) + */ + public static final SimpleDateFormat FORMATTER_DATE_MINUTE_COMPACT = new SimpleDateFormat(DatePlusUtils.FORMAT_DATE_MINUTE_COMPACT); + + /** + * 时间格式化-日期时间戳-无间隔(yyyyMMddHHmmssSSS) + */ + public static final SimpleDateFormat FORMATTER_DATE_TIME_STAMP_COMPACT = new SimpleDateFormat(DatePlusUtils.FORMAT_DATE_TIME_STAMP_COMPACT); + + /** + * 时间格式化-月份天数-无间隔(MMdd) + */ + public static final SimpleDateFormat FORMATTER_MONTH_DAY_COMPACT = new SimpleDateFormat(DatePlusUtils.FORMAT_MONTH_DAY_COMPACT); + + /** + * 取得系统当前的年份,格式如: (2008) + * @return String + */ + public static String getSystemYearString() { + return DatePlusUtils.FORMATTER_YEAR.format(new Date()); + } + + /** + * 取得系统当前的年份,格式如: (2008-05) + * @return String + */ + public static String getSystemYearMonthString() { + return DatePlusUtils.FORMATTER_YEAR_MONTH.format(new Date()); + } + + /** + * 取得系统当前的日期字符表达式,格式如: (2008-05-12) + * @return String + */ + public static String getSystemDateString() { + return DatePlusUtils.FORMATTER_DATE.format(new Date()); + } + + /** + * 取得系统当前的日期时间字符表达式,格式如: (2008-05-12 14:28:36)
+ * @return String + */ + public static String getSystemDateTimeString() { + return DatePlusUtils.FORMATTER_DATE_TIME.format(new Date()); + } + + /** + * 取得系统当前的日期时间字符表达式,格式如: (20080512142836)
+ * @return String + */ + public static String getSystemDateTimeCompactString() { + return DatePlusUtils.FORMATTER_DATE_TIME_COMPACT.format(new Date()); + } + + /** + * 取得系统当前的日期时间错字符表达式(带毫秒数),格式如: (20080512142836326)
+ * @return String + */ + public static String getSystemDateTimeStampCompactString() { + return DatePlusUtils.FORMATTER_DATE_TIME_STAMP_COMPACT.format(new Date()); + } + + /** + * 取得一个日期的字符表达式,格式如: (2008) + * @param convertDate 需要转换的日期 + * @return String + */ + public static String getYearString(Date convertDate){ + if(convertDate == null){ + return ""; + } + return DatePlusUtils.FORMATTER_YEAR.format(convertDate); + } + + /** + * 取得一个日期的字符表达式,格式如: (12) + * @param convertDate 需要转换的日期 + * @return String + */ + public static String getDayString(Date convertDate){ + if(convertDate == null){ + return ""; + } + return DatePlusUtils.FORMATTER_DAY.format(convertDate); + } + + /** + * 取得一个日期的字符表达式,格式如: (05) + * @param convertDate 需要转换的日期 + * @return String + */ + public static String getHourString(Date convertDate){ + if(convertDate == null){ + return ""; + } + return DatePlusUtils.FORMATTER_HOUR.format(convertDate); + } + + /** + * 取得一个日期的字符表达式,格式如: (2008-05-12) + * @param convertDate 需要转换的日期 + * @return String + */ + public static String getDateString(Date convertDate) { + if(convertDate == null){ + return ""; + } + return DatePlusUtils.FORMATTER_DATE.format(convertDate); + } + + /** + * 获取每天的开始日期时间,格式如: (2008-05-12)(不传日期则计算当前日期) + * @param convertDate 日期 + * @return Date + */ + public static Date getDateBeginReturnDate(Date convertDate){ + if(convertDate == null){ + convertDate = new Date(); + } + String dateString = DatePlusUtils.getDateString(convertDate); + return DatePlusUtils.stringToDate(dateString, DatePlusUtils.FORMAT_DATE); + } + + /** + * 获取每天的开始日期时间,格式如: (2008-05-12 23:59:59)(不传日期则计算当前日期) + * @param convertDate 日期 + * @return Date + */ + public static Date getDateEndReturnDate(Date convertDate){ + if(convertDate == null){ + convertDate = new Date(); + } + String dateString = DatePlusUtils.getDateString(convertDate) + DatePlusUtils.DAY_END_TIME; + return DatePlusUtils.stringToDate(dateString, DatePlusUtils.FORMAT_DATE_TIME); + } + + /** + * 取得一个日期小时的字符表达式,格式如: (2008-05-12 02)
+ * @param convertDate 需要转换的日期 + * @return String + */ + public static String getDateHourString(Date convertDate) { + if(convertDate == null){ + return ""; + } + return DatePlusUtils.FORMATTER_DATE_HOUR.format(convertDate); + } + + /** + * 取得一个日期时间的字符表达式,格式如: (2008-05-12 14:28:36)
+ * + * @param convertDate 需要转换的日期 + * @return String + */ + public static String getDateTimeString(Date convertDate) { + if(convertDate == null){ + return ""; + } + return DatePlusUtils.FORMATTER_DATE_TIME.format(convertDate); + } + + /** + * 取得一个时间的字符表达式,格式如: (14:28:36)
+ * + * @param convertDate 需要转换的日期 + * @return String + */ + public static String getTimeString(Date convertDate) { + if(convertDate == null){ + return ""; + } + return DatePlusUtils.FORMATTER_TIME.format(convertDate); + } + + /** + * 取得一个日期的紧凑字符表达式,格式如: (20080512)
+ * @param convertDate 需要转换的日期 + * @return String + */ + public static String getDateCompactString(Date convertDate) { + if(convertDate == null){ + return ""; + } + return DatePlusUtils.FORMATTER_DATE_COMPACT.format(convertDate); + } + + /** + * 取得一个日期时间的紧凑字符表达式,格式如: (20080512142836)
+ * @param convertDate 需要转换的日期 + * @return String + */ + public static String getDateTimeCompactString(Date convertDate) { + if(convertDate == null){ + return ""; + } + return DatePlusUtils.FORMATTER_DATE_TIME_COMPACT.format(convertDate); + } + + /** + * 取得一个日期的中文字符表达式,格式如: (2008年5月12日)
+ * @param convertDate 需要转换的日期 + * @return String + */ + public static String getChineseDateString(Date convertDate) { + if(convertDate == null){ + return ""; + } + return DateFormat.getDateInstance(DateFormat.LONG).format(convertDate); + } + + /** + * 取得一个日期的中文字符表达式,使用字符串拼接的方式,格式如: (2008年5月12日)
+ * @param convertDate 需要转换的日期 + * @return String + */ + public static String getChineseDateStringByMontage(Date convertDate) { + String returnValue = ""; + if (convertDate != null) { + String temp = DatePlusUtils.FORMATTER_DATE_COMPACT.format(convertDate); + returnValue = temp.substring(0, 4) + "年"; + if("0".equals(temp.substring(4, 5))){ + returnValue += temp.substring(5, 6); + }else{ + returnValue += temp.substring(4, 6); + } + returnValue += "月" + temp.substring(6, 8) + "日"; + } + return returnValue; + } + + /** + * 取得一个日期时间的中文字符表达式,格式如: (2008年05月12日14时)
+ * + * @param convertDate 需要转换的日期 + * @return String + */ + public static String getChineseDateHourString(Date convertDate) { + String returnValue = ""; + if (convertDate != null) { + String temp = DatePlusUtils.FORMATTER_DATE_HOUR_COMPACT.format(convertDate); + returnValue = temp.substring(0, 4) + "年" + temp.substring(4, 6) + + "月" + temp.substring(6, 8) + "日" + temp.substring(8, 10) + + "时"; + } + return returnValue; + } + + /** + * 取得一个日期时间的中文字符表达式,格式如: (2008年05月12日14时28分)
+ * @param convertDate 需要转换的日期 + * @return String + */ + public static String getChineseDateTimeString(Date convertDate) { + String returnValue = ""; + if (convertDate != null) { + String temp = DatePlusUtils.FORMATTER_DATE_TIME_COMPACT.format(convertDate); + returnValue = temp.substring(0, 4) + "年" + temp.substring(4, 6) + + "月" + temp.substring(6, 8) + "日" + temp.substring(8, 10) + + "时" + temp.substring(10, 12) + "分"; + } + return returnValue; + } + + /** + * 取得一个日期的中文字符表达式,包括星期,格式如: (2008年5月12日 星期一)
+ * @param convertDate 需要转换的日期 + * @return String + */ + public static String getChineseDateWeekString(Date convertDate) { + String returnValue = ""; + if (convertDate != null) { + DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL); + returnValue = dateFormat.format(convertDate); + } + return returnValue; + } + + /** + * 取得一个日期星期的中文字符表达式,格式如: (星期一)
+ * @param convertDate 需要转换的日期 + * @return String + */ + public static String getChineseWeekString(Date convertDate){ + String returnValue = ""; + if (convertDate != null) { + Calendar cal = Calendar.getInstance(); + cal.setTime(convertDate); + int weekIndex = cal.get(Calendar.DAY_OF_WEEK) - 1; + if(weekIndex < 0){ + weekIndex = 0; + } + returnValue = CHINESE_WEEKS_ARRAY[weekIndex]; + } + return returnValue; + } + + /** + * 取得一个日期的纯中文字符表达式,格式如: (2008-05-12 转换后得到 二00八年五月十二日)
+ * @param dateString 需要转换的日期字符串 + * @return String + */ + public static String getPureChineseDateString(String dateString) throws Exception { + if (StringUtils.isBlank(dateString)) { + return ""; + } + StringBuilder returnValue = new StringBuilder(); + String[] chinaNumber = new String[10]; + chinaNumber[0] = "0"; + chinaNumber[1] = "一"; + chinaNumber[2] = "二"; + chinaNumber[3] = "三"; + chinaNumber[4] = "四"; + chinaNumber[5] = "五"; + chinaNumber[6] = "六"; + chinaNumber[7] = "七"; + chinaNumber[8] = "八"; + chinaNumber[9] = "九"; + String tempString = ""; + try { + tempString = dateString.substring(0, 4); + for (int i = 0; i < tempString.length(); i++) { + int cn = Integer.parseInt(tempString.substring(i, i + 1)); + returnValue.append(chinaNumber[cn]); + } + returnValue.append("年"); + tempString = dateString.substring(5, 7); + for (int i = 0; i < tempString.length(); i++) { + int cn = Integer.parseInt(tempString.substring(i, i + 1)); + if (i == 0) { + if (cn == 1) { + returnValue.append("十"); + } + } else { + if (cn > 0){ + returnValue.append(chinaNumber[cn]); + } + } + } + returnValue.append("月"); + tempString = dateString.substring(8); + for (int i = 0; i < tempString.length(); i++) { + int cn = Integer.parseInt(tempString.substring(i, i + 1)); + if (i == 0) { + switch (cn) { + case 0: + break; + case 1: + returnValue.append("十"); + break; + default: + returnValue.append(chinaNumber[cn]).append("十"); + break; + } + } else { + if (cn > 0) { + returnValue.append(chinaNumber[cn]); + } + } + } + returnValue.append("日"); + return returnValue.toString(); + } catch (Exception ex) { + log.error("日期转换错误: 转换字符串: " + dateString + "," + ex.getMessage(), ex); + throw new Exception("日期转换错误: 转换字符串: " + dateString + "," + ex.getMessage()); + } + } + + /** + * 取得一个日期的纯中文字符表达式,格式如: (2008-05-12 转换后得到 二○○八年五月十二日)
+ * @param dateString 需要转换的日期字符串 + * @return String + */ + public static String getPureChineseDateString2(String dateString) throws Exception { + if (StringUtils.isBlank(dateString)) { + return ""; + } + StringBuilder returnValue = new StringBuilder(); + String[] chinaNumber = new String[10]; + chinaNumber[0] = "○"; + chinaNumber[1] = "一"; + chinaNumber[2] = "二"; + chinaNumber[3] = "三"; + chinaNumber[4] = "四"; + chinaNumber[5] = "五"; + chinaNumber[6] = "六"; + chinaNumber[7] = "七"; + chinaNumber[8] = "八"; + chinaNumber[9] = "九"; + String tempString = ""; + try { + tempString = dateString.substring(0, 4); + for (int i = 0; i < tempString.length(); i++) { + int cn = Integer.parseInt(tempString.substring(i, i + 1)); + returnValue.append(chinaNumber[cn]); + } + returnValue.append("年"); + tempString = dateString.substring(5, 7); + for (int i = 0; i < tempString.length(); i++) { + int cn = Integer.parseInt(tempString.substring(i, i + 1)); + if (i == 0) { + if (cn == 1) { + returnValue.append("十"); + } + } else { + if (cn > 0) { + returnValue.append(chinaNumber[cn]); + } + } + } + returnValue.append("月"); + tempString = dateString.substring(8); + for (int i = 0; i < tempString.length(); i++) { + int cn = Integer.parseInt(tempString.substring(i, i + 1)); + if (i == 0) { + switch (cn) { + case 0: + break; + case 1: + returnValue.append("十"); + break; + default: + returnValue.append(chinaNumber[cn]).append("十"); + break; + } + } else { + if (cn > 0) { + returnValue.append(chinaNumber[cn]); + } + } + } + returnValue.append("日"); + return returnValue.toString(); + } catch (Exception ex) { + log.error("日期转换错误: 转换字符串: " + dateString + "," + ex.getMessage(), ex); + throw new Exception("日期转换错误: 转换字符串: " + dateString + "," + ex.getMessage()); + } + } + + /** + * 取得指定的下一个日期 + * 注意:按月运算时,如果运算后当月没有该日,则为当月的最后一天 + * @param startDate 开始日期 + * @param nextType 运算类型(Y=年数;M=月数;D=天数;H=小时数;m=分钟数;S=秒数) + * @param nextStep 运算长度(为负数指取以前的日期) + * @return java.util.Date + */ + public static Date getNextDate(Date startDate, String nextType, int nextStep) { + Date endDate = startDate; + if (startDate != null) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(startDate); + switch (nextType) { + case DatePlusUtils.NEXT_TYPE_YEAR: + calendar.add(Calendar.YEAR, nextStep); + break; + case DatePlusUtils.NEXT_TYPE_MONTH: + calendar.add(Calendar.MONTH, nextStep); + break; + case DatePlusUtils.NEXT_TYPE_DAY: + calendar.add(Calendar.DATE, nextStep); + break; + case DatePlusUtils.NEXT_TYPE_HOUR: + calendar.add(Calendar.HOUR, nextStep); + break; + case DatePlusUtils.NEXT_TYPE_MINUTE: + calendar.add(Calendar.MINUTE, nextStep); + break; + case DatePlusUtils.NEXT_TYPE_SECOND: + calendar.add(Calendar.SECOND, nextStep); + break; + default: break; + } + endDate = calendar.getTime(); + } + return endDate; + } + + /** + * 字符串转换成日期 (注意: dateString 与 formatString 要匹配)
+ * @param dateString 需要转换的日期字符串 + * @param formatString 转换格式 yyyy-MM-dd HH:mm:ss 或 yyyy-MM-dd + * @return java.util.Date + */ + public static Date stringToDate(String dateString, String formatString) { + Date returnValue = null; + try { + if (StringUtils.isNotBlank(dateString)) { + SimpleDateFormat formatter = new SimpleDateFormat(formatString); + // 设置时间分析为严格的 + formatter.setLenient(false); + returnValue = formatter.parse(dateString); + } + } catch (Exception ex) { + log.error("日期转换错误: " + dateString + " 指定格式 [" + formatString + "]," + ex.getMessage(), ex); + throw new BusinessException("日期转换错误: " + dateString + " 指定格式 [" + formatString + "]," + ex.getMessage()); + } + return returnValue; + } + + /** + * 字符串转换成日期 (注意: dateString 与 formatter 要匹配)
+ * @param dateString 需要转换的日期字符串 + * @param formatter 格式转换器 + * @return java.util.Date + */ + public static Date stringToDate(String dateString, SimpleDateFormat formatter) { + Date returnValue = null; + try { + if (StringUtils.isNotBlank(dateString)) { + // 设置时间分析为严格的 + formatter.setLenient(false); + returnValue = formatter.parse(dateString); + } + } catch (Exception ex) { + log.error("日期转换错误: " + dateString + "," + ex.getMessage(), ex); + throw new BusinessException("日期转换错误: " + dateString + "," + ex.getMessage()); + } + return returnValue; + } + + /** + * 获取指定日期当周的第一天 + * @param date 指定日期 + * @return 指定日期当周的第一天 + */ + public static Date getWeekFirstDay(Date date){ + if(ObjectUtils.isEmpty(date)){ + date = new Date(); + } + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + cal.setFirstDayOfWeek(Calendar.MONDAY); + cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); + cal.set(Calendar.HOUR_OF_DAY, 0); + cal.set(Calendar.MINUTE, 0); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); + return cal.getTime(); + } + + /** + * 获取指定日期当周的最后一天 + * @param date 指定日期 + * @return 指定日期当周的最后一天 + */ + public static Date getWeekLastDay(Date date){ + if(ObjectUtils.isEmpty(date)){ + date = new Date(); + } + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + cal.setFirstDayOfWeek(Calendar.MONDAY); + cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); + cal.set(Calendar.HOUR_OF_DAY, 0); + cal.set(Calendar.MINUTE, 0); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); + return cal.getTime(); + } + + /** + * 获取指定日期当月的第一天 + * @param date 指定日期 + * @return 指定日期当月的第一天 + */ + public static Date getMonthFirstDay(Date date) { + if(ObjectUtils.isEmpty(date)){ + date = new Date(); + } + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + cal.set(Calendar.DAY_OF_MONTH, 1); + cal.set(Calendar.HOUR_OF_DAY, 0); + cal.set(Calendar.MINUTE, 0); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); + return cal.getTime(); + } + + /** + * 获取指定日期当月的最后一天 + * @param date 指定日期 + * @return 指定日期当月的最后一天 + */ + public static Date getMonthLastDay(Date date) { + if(ObjectUtils.isEmpty(date)){ + date = new Date(); + } + // 获取下个月的第一天 + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + cal.set(Calendar.DAY_OF_MONTH, +1); + cal.roll(Calendar.DAY_OF_MONTH, -1); + cal.set(Calendar.HOUR_OF_DAY, 0); + cal.set(Calendar.MINUTE, 0); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); + return cal.getTime(); + } + + /** + * 获取指定月的最后一天 + * @param monthStr 月份字符串(yyyy-MM) + * @return 指定月的最后一天 + */ + public static Date getMonthLastDay(String monthStr) { + monthStr = monthStr + DatePlusUtils.MONTH_START_DATE; + Date date = DatePlusUtils.stringToDate(monthStr, DatePlusUtils.FORMAT_DATE); + // 获取下个月的第一天 + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + cal.set(Calendar.DAY_OF_MONTH, +1); + cal.roll(Calendar.DAY_OF_MONTH, -1); + return cal.getTime(); + } + + /** + * 计算两个日期之间相差的天数 + * @param startDate 较小的时间 + * @param endDate 较大的时间 + * @return 相差天数 + */ + public static int dateBetween(Date startDate, Date endDate) { + try { + startDate = DatePlusUtils.FORMATTER_DATE.parse(DatePlusUtils.FORMATTER_DATE.format(startDate)); + endDate = DatePlusUtils.FORMATTER_DATE.parse(DatePlusUtils.FORMATTER_DATE.format(endDate)); + Calendar cal = Calendar.getInstance(); + cal.setTime(startDate); + long time1 = cal.getTimeInMillis(); + cal.setTime(endDate); + long time2 = cal.getTimeInMillis(); + long between_days = (time2 - time1) / (DatePlusUtils.RADIX_MILLISECOND_IN_DAY); + return Integer.parseInt(String.valueOf(between_days)); + } catch (ParseException e) { + e.printStackTrace(); + } + return 0; + } + + /** + * 计算两个日期之间相差的天数 + * @param startDate 较小的时间 + * @param endDate 较大的时间 + * @return 相差天数 + */ + public static Double dateBetween(Date startDate, Date endDate, String ksrqLx, String jsrqLx) { + try { + startDate = DatePlusUtils.FORMATTER_DATE.parse(DatePlusUtils.FORMATTER_DATE.format(startDate)); + endDate = DatePlusUtils.FORMATTER_DATE.parse(DatePlusUtils.FORMATTER_DATE.format(endDate)); + Calendar cal = Calendar.getInstance(); + cal.setTime(startDate); + long time1 = cal.getTimeInMillis(); + cal.setTime(endDate); + long time2 = cal.getTimeInMillis(); + long between_days = (time2 - time1) / (DatePlusUtils.RADIX_MILLISECOND_IN_DAY); + Double sc = Double.valueOf(String.valueOf(between_days)) + 1; + if("02".equals(ksrqLx)) { + sc = sc - 0.5; + } + if("01".equals(jsrqLx)) { + sc = sc - 0.5; + } + return sc; + } catch (ParseException e) { + e.printStackTrace(); + } + return 0.0; + } + + /** + * 计算两个时间之间的差 + * @param date1 时间1 + * @param date2 时间2 + * @return 相差时间 + */ + public static String dateGap(String date1, String date2) { + String zqsc = ""; + try { + Date parse1 = DatePlusUtils.FORMATTER_DATE_TIME.parse(date1); + Date parse2 = DatePlusUtils.FORMATTER_DATE_TIME.parse(date2); + long time; + if (parse1.before(parse2)) { + time = parse2.getTime() - parse1.getTime(); + } else { + time = parse1.getTime() - parse2.getTime(); + } + long days = time / (DatePlusUtils.RADIX_MILLISECOND_IN_DAY);//天 + long hours = (time - days * (DatePlusUtils.RADIX_MILLISECOND_IN_DAY)) / (DatePlusUtils.RADIX_MILLISECOND_IN_HOUR);//小时 + long minutes = (time - days * (DatePlusUtils.RADIX_MILLISECOND_IN_DAY) - hours * (DatePlusUtils.RADIX_MILLISECOND_IN_HOUR)) / (DatePlusUtils.RADIX_MILLISECOND_IN_MINUTE);//分钟 + zqsc = days + "天" + hours + "小时" + minutes + "分钟"; + } catch (ParseException e) { + e.printStackTrace(); + } + return zqsc; + } + + /** + * 两个年数据 相减 + * @param startDate 开始日期 + * @param endDate 结束日期 + * @return 年份相减 + */ + public static Integer yearGap(Date startDate, Date endDate) { + if(startDate == null || endDate == null){ + return null; + } + return endDate.getYear() - startDate.getYear(); + } + + /** + * 比较2个日期间大小 + * date1在date2之前,返回true,date1在date2之后,返回false + * @param date1 时间1字符串 + * @param date2 时间2字符串 + * @return date1是否在date2之前 + */ + public static boolean compareDateString(String date1, String date2) { + try { + Date dt1 = DatePlusUtils.FORMATTER_DATE_TIME.parse(date1); + Date dt2 = DatePlusUtils.FORMATTER_DATE_TIME.parse(date2); + return dt1.getTime() < dt2.getTime(); + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } + + /** + * 比较2个日期间大小 + * date1在date2之前,返回true,date1在date2之后,返回false + * @param date1 时间1 + * @param date2 时间2 + * @return boolean date1是否在date2之前 + */ + public static boolean compareDate(Date date1, Date date2) { + try { + return date1.getTime() < date2.getTime(); + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } + + /** + * 计算日期是否在日期范围中 + * @param range1 日期范围开始时间 + * @param range2 日期范围结束时间 + * @param target 需要计算的日期 + * @return 是否在两个日期范围中,true表示在范围内,false表示在范围外 + */ + public static boolean betweenDateRange(Date range1, Date range2, Date target){ + if(range1 == null || range2 == null || target == null){ + return false; + } + return range1.getTime() <= target.getTime() && target.getTime() <= range2.getTime(); + } + + /** + * 日期转星期 + * @param dateString 日期字符串 + * @return String + */ + public static String dateToWeekReturnChinese(String dateString) { + String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; + // 获得一个日历 + Calendar cal = Calendar.getInstance(); + try { + Date date = DatePlusUtils.FORMATTER_DATE.parse(dateString); + cal.setTime(date); + } catch (ParseException e) { + e.printStackTrace(); + } + // 指示一个星期中的某天。 + int w = cal.get(Calendar.DAY_OF_WEEK) - 1; + if (w < 0) { + w = 0; + } + return weekDays[w]; + } + + /** + * 日期转星期 + * @param date 日期 + * @return String + */ + public static String dateToWeekReturnChinese(Date date) { + String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; + // 获得一个日历 + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + // 指示一个星期中的某天。 + int w = cal.get(Calendar.DAY_OF_WEEK) - 1; + if (w < 0) { + w = 0; + } + return weekDays[w]; + } + + /** + * 日期转星期 + * @param dateString 日期字符串 + * @return String + */ + public static int dateToWeekReturnInt(String dateString) { + // 获得一个日历 + Calendar cal = Calendar.getInstance(); + try { + Date date = DatePlusUtils.FORMATTER_DATE.parse(dateString); + cal.setTime(date); + } catch (ParseException e) { + e.printStackTrace(); + } + // 指示一个星期中的某天。 + int w = cal.get(Calendar.DAY_OF_WEEK) - 1; + if (w < 0) { + w = 0; + } + return w; + } + + /** + * 日期转星期 + * @param date 日期 + * @return int + */ + public static int dateToWeekReturnInt(Date date) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + int w = cal.get(Calendar.DAY_OF_WEEK) - 1; + if (w < 0) w = 0; + return w; + } + + /** + * 返回时间段里面的所有日期 + * @param startDate 开始日期 + * @param endDate 结束日期 + * @return List 日期字符串集合 + */ + public static List getDays(String startDate, String endDate) { + // 返回的日期集合 + List days = new ArrayList<>(); + if(StringUtils.isBlank(startDate) || StringUtils.isBlank(endDate)) { + return days; + } + try { + Date start = DatePlusUtils.FORMATTER_DATE.parse(startDate); + Date end = DatePlusUtils.FORMATTER_DATE.parse(endDate); + + Calendar tempStart = Calendar.getInstance(); + tempStart.setTime(start); + + Calendar tempEnd = Calendar.getInstance(); + tempEnd.setTime(end); + tempEnd.add(Calendar.DATE, +1);// 日期加1(包含结束) + while (tempStart.before(tempEnd)) { + days.add(DatePlusUtils.FORMATTER_DATE.format(tempStart.getTime())); + tempStart.add(Calendar.DAY_OF_YEAR, 1); + } + } catch (ParseException e) { + e.printStackTrace(); + } + return days; + } + + /** + * 返回时间段里面的所有日期 + * @param start 开始日期 + * @param end 结束日期 + * @return List 日期字符串集合 + */ + public static List getDays(Date start, Date end) { + // 返回的日期集合 + List days = new ArrayList<>(); + if(ObjectUtils.isEmpty(start) || ObjectUtils.isEmpty(end)) { + return days; + } + Calendar tempStart = Calendar.getInstance(); + tempStart.setTime(start); + + Calendar tempEnd = Calendar.getInstance(); + tempEnd.setTime(end); + tempEnd.add(Calendar.DATE, +1);// 日期加1(包含结束) + while (tempStart.before(tempEnd)) { + days.add(DatePlusUtils.FORMATTER_DATE.format(tempStart.getTime())); + tempStart.add(Calendar.DAY_OF_YEAR, 1); + } + return days; + } + + /** + * 将时间戳转为日期 + * @param stamp 时间戳 + * @return 日期 + */ + public static Date toTimeStamp(Long stamp){ + try{ + Calendar tempEnd = Calendar.getInstance(); + tempEnd.setTimeInMillis(stamp); + return tempEnd.getTime(); + }catch (Exception e){ + return null; + } + } + + /** + * 根据指定时间,获取指定的一周的指定星期 + * @param date 指定时间 + * @param weekDay 指定星期 + * @return 指定星期日期 + */ + public static Date getWeekDayDate(Date date, Integer weekDay) { + int weekday = DatePlusUtils.dateToWeekReturnInt(date); + if(weekday == weekDay){ + return date; + } + Date start = date; + while(weekday != weekDay){ + start = DatePlusUtils.getNextDate(start, DatePlusUtils.NEXT_TYPE_DAY,1); + weekday = DatePlusUtils.dateToWeekReturnInt(start); + } + return start; + } + + /** + * 获取今天日期 + * @return 今天 + */ + public static Date getToday(){ + return DatePlusUtils.stringToDate(DatePlusUtils.getSystemDateString(), DatePlusUtils.FORMAT_DATE); + } + + /** + * 获取今天结束时间 + * @return 今天结束时间 + */ + public static Date getTodayEnd(){ + return DatePlusUtils.stringToDate(DatePlusUtils.getSystemDateString() + DatePlusUtils.DAY_END_TIME, DatePlusUtils.FORMAT_DATE_TIME); + } + + /** + * 获取当前月份 + * @return 本月 + */ + public static Date getThisYearMonth(){ + return DatePlusUtils.stringToDate(DatePlusUtils.getSystemYearMonthString(), DatePlusUtils.FORMAT_YEAR_MONTH); + } + + /** + * 获取昨天日期开始,格式如: (2008-05-12)(不传日期则计算当前日期的前一天) + * @param date 计算日期 + * @return 计算日期的前一天 + */ + public static Date getYesterdayBegin(Date date){ + return getOtherDateBegin(date, -1); + } + + /** + * 获取昨天日期,格式如: (2008-05-12 23:59:59)(不传日期则计算当前日期的前一天) + * @param date 计算日期 + * @return 计算日期的前一天 + */ + public static Date getYesterdayEnd(Date date){ + return getOtherDateEnd(date, -1); + } + + /** + * 获取指定日期相差other天的日期,格式如: (2008-05-12) + * @param date 指定日期 + * @param other 相差天数 + * @return Date 相差other天的日期,格式如: (2008-05-12) + */ + public static Date getOtherDateBegin(Date date, int other){ + if(date == null){ + date = new Date(); + } + return DatePlusUtils.stringToDate( + DatePlusUtils.getDateString(DatePlusUtils.getNextDate(date, DatePlusUtils.NEXT_TYPE_DAY, other)), + DatePlusUtils.FORMAT_DATE + ); + } + + /** + * 获取指定日期相差other天的日期,格式如: (2008-05-12 23:59:59) + * @param date 指定日期 + * @param other 相差天数 + * @return Date 相差other天的日期,格式如: (2008-05-12 23:59:59) + */ + public static Date getOtherDateEnd(Date date, int other){ + if(date == null){ + date = new Date(); + } + return DatePlusUtils.stringToDate( + DatePlusUtils.getDateString(DatePlusUtils.getNextDate(date, DatePlusUtils.NEXT_TYPE_DAY, other)) + DatePlusUtils.DAY_END_TIME, + DatePlusUtils.FORMAT_DATE_TIME + ); + } + + public static void main(String[] args) { + try { + System.out.println(DatePlusUtils.getDateTimeString(DatePlusUtils.getWeekFirstDay(DatePlusUtils.stringToDate("2024-03-15", DatePlusUtils.FORMAT_DATE)))); + System.out.println(DatePlusUtils.getDateTimeString(DatePlusUtils.getWeekLastDay(DatePlusUtils.stringToDate("2024-03-15", DatePlusUtils.FORMAT_DATE)))); + System.out.println(DatePlusUtils.getDateTimeString(DatePlusUtils.getMonthFirstDay(DatePlusUtils.stringToDate("2024-03-15", DatePlusUtils.FORMAT_DATE)))); + System.out.println(DatePlusUtils.getDateTimeString(DatePlusUtils.getMonthLastDay(DatePlusUtils.stringToDate("2024-03-15", DatePlusUtils.FORMAT_DATE)))); + } catch (Exception e){ + e.printStackTrace(); + } + } + +} diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/utils/Kit.java b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/utils/Kit.java index 6f4013b..b9b8461 100644 --- a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/utils/Kit.java +++ b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/utils/Kit.java @@ -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; } // 检查经纬度是否合法 diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/utils/MathUtils.java b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/utils/MathUtils.java new file mode 100644 index 0000000..0b58100 --- /dev/null +++ b/feign-client-api/mosty-base-feign-sdk/src/main/java/com/mosty/base/utils/MathUtils.java @@ -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; + } + +} diff --git a/feign-client-api/mosty-base-feign-sdk/src/main/resources/i18n/messages.properties b/feign-client-api/mosty-base-feign-sdk/src/main/resources/i18n/messages.properties index 347c594..b037d69 100644 --- a/feign-client-api/mosty-base-feign-sdk/src/main/resources/i18n/messages.properties +++ b/feign-client-api/mosty-base-feign-sdk/src/main/resources/i18n/messages.properties @@ -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=当日没有生成任务,请生成后再下载 \ No newline at end of file +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=【打卡纬度】不能为空 \ No newline at end of file diff --git a/mosty-yjzl/src/main/java/com/mosty/yjzl/controller/TbZdxlFgdwBddController.java b/mosty-yjzl/src/main/java/com/mosty/yjzl/controller/TbZdxlFgdwBddController.java new file mode 100644 index 0000000..0577336 --- /dev/null +++ b/mosty-yjzl/src/main/java/com/mosty/yjzl/controller/TbZdxlFgdwBddController.java @@ -0,0 +1,236 @@ +package com.mosty.yjzl.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.mosty.base.model.dto.yjzl.TbZdxlFgdwBddSaveDTO; +import com.mosty.base.model.dto.yjzl.TbZdxlFgdwBddUpdateDTO; +import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgdwBdd; +import com.mosty.base.model.query.yjzl.TbZdxlFgdwBddQuery; +import com.mosty.base.model.vo.yjzl.TbZdxlFgdwBddVO; +import com.mosty.base.model.vo.yjzl.TbZdxlFgdwVO; +import com.mosty.base.utils.Kit; +import com.mosty.base.utils.MessageUtils; +import com.mosty.base.utils.spring.SpringValidUtils; +import com.mosty.common.base.domain.ResponseResult; +import com.mosty.common.base.entity.log.BusinessType; +import com.mosty.common.base.entity.log.Log; +import com.mosty.common.token.JwtSysUser; +import com.mosty.yjzl.service.TbZdxlFgdwBddService; +import com.mosty.yjzl.service.TbZdxlFgdwService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.locationtech.jts.geom.Coordinate; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.math.BigDecimal; +import java.util.List; + +/** + * @author zhangzhao + * @description 指导巡逻方格点位必到点接口 + * @modifier zhangzhao + * @modifiedTime 2025/09/06 12:00 + * @since 2025/09/06 12:00 + */ +@Api(tags = {"指导巡逻-方格点位必到点接口"}) +@RestController +@AllArgsConstructor +@RequestMapping("/tbZdxlFgdwBdd") +public class TbZdxlFgdwBddController { + + /** + * 指导巡逻方格点位必到点表Service + */ + private final TbZdxlFgdwBddService tbZdxlFgdwBddService; + + /** + * 指导巡逻方格点位表Service + */ + private final TbZdxlFgdwService tbZdxlFgdwService; + + /** + * 查询单条(根据主键ID) + * @param id 主键ID + * @return ResponseResult 实体信息 + */ + @ApiOperation(value = "查询单条(根据主键ID)") + @GetMapping("{id}") + @JwtSysUser + @Log(title = "指导巡逻-方格点位必到点接口-查询单条(根据主键ID)", businessType = BusinessType.OTHER) + public ResponseResult selectById(@PathVariable("id") String id) { + return ResponseResult.success(tbZdxlFgdwBddService.selectById(id)); + } + + /** + * 查询分页 + * @param query 实体查询对象 + * @return ResponseResult 实体信息分页列表 + */ + @ApiOperation(value = "查询分页") + @GetMapping("/selectPage") + @JwtSysUser + @Log(title = "指导巡逻-方格点位必到点接口-查询分页", businessType = BusinessType.OTHER) + public ResponseResult> selectPage(TbZdxlFgdwBddQuery query) { + return ResponseResult.success(tbZdxlFgdwBddService.selectPage(query)); + } + + /** + * 查询列表 + * @param query 实体查询对象 + * @return ResponseResult 实体信息列表 + */ + @ApiOperation(value = "查询列表") + @GetMapping("/selectList") + @JwtSysUser + @Log(title = "指导巡逻-方格点位必到点接口-查询列表", businessType = BusinessType.OTHER) + public ResponseResult> selectList(TbZdxlFgdwBddQuery query) { + return ResponseResult.success(tbZdxlFgdwBddService.selectList(query)); + } + + /** + * 保存单条 + * @param dto 保存DTO对象 + * @param bindResult 校验对象 + * @return ResponseResult 实体主键ID + */ + @ApiOperation(value = "保存单条") + @PostMapping("save") + @JwtSysUser + @Log(title = "指导巡逻-方格点位必到点接口-保存单条", businessType = BusinessType.INSERT) + public ResponseResult save(@RequestBody @Valid TbZdxlFgdwBddSaveDTO dto, BindingResult bindResult) { + try { + //基础信息校验 + String message = SpringValidUtils.getErrorsMsg(bindResult); + if (StringUtils.isNotBlank(message)) { + return ResponseResult.fail(MessageUtils.getSaveFailMsg() + message); + } + + //校验点位是否在方格内 + TbZdxlFgdwVO fgdwVO = tbZdxlFgdwService.selectById(dto.getFgdwId()); + if(ObjectUtils.isEmpty(fgdwVO)){ + return ResponseResult.fail(MessageUtils.getSaveFailMsg() + "方格信息不存在,请退出页面后重新选择"); + } + if(ObjectUtils.isEmpty(fgdwVO.getX1()) || ObjectUtils.isEmpty(fgdwVO.getY1()) || ObjectUtils.isEmpty(fgdwVO.getX2()) || ObjectUtils.isEmpty(fgdwVO.getY2())){ + return ResponseResult.fail(MessageUtils.getSaveFailMsg() + "方格信息不准确,请选择其他方格"); + } + boolean isInGeometry = this.isInGeometry(fgdwVO, dto.getJd(), dto.getWd()); + if(!isInGeometry){ + return ResponseResult.fail(MessageUtils.getSaveFailMsg() + "点位不在方格内,请重新选点"); + } + + //保存 + String resultId = tbZdxlFgdwBddService.saveEntity(dto); + if(StringUtils.isNotBlank(resultId)){ + return ResponseResult.success(resultId); + } + return ResponseResult.fail(MessageUtils.getSaveFailMsg()); + } catch (Exception e) { + return ResponseResult.fail(MessageUtils.getSaveServerErrorMsg()); + } + } + + /** + * 修改单条 + * @param dto 修改DTO对象 + * @param bindResult 校验对象 + * @return ResponseResult 实体主键ID + */ + @ApiOperation(value = "修改单条") + @PostMapping("update") + @JwtSysUser + @Log(title = "指导巡逻-方格点位必到点接口-修改单条", businessType = BusinessType.UPDATE) + public ResponseResult update(@RequestBody @Valid TbZdxlFgdwBddUpdateDTO dto, BindingResult bindResult){ + try { + //基础信息校验 + String message = SpringValidUtils.getErrorsMsg(bindResult); + if (StringUtils.isNotBlank(message)) { + return ResponseResult.fail(MessageUtils.getEditFailMsg() + message); + } + + //校验数据是否存在 + TbZdxlFgdwBdd baseEntity = tbZdxlFgdwBddService.selectById(dto.getId()); + if(ObjectUtils.isEmpty(baseEntity)){ + return ResponseResult.fail(MessageUtils.getEditDataNotFoundMsg()); + } + + //校验点位是否在方格内 + TbZdxlFgdwVO fgdwVO = tbZdxlFgdwService.selectById(dto.getFgdwId()); + if(ObjectUtils.isEmpty(fgdwVO)){ + return ResponseResult.fail(MessageUtils.getEditFailMsg() + "方格信息不存在,请退出页面后重新选择"); + } + if(ObjectUtils.isEmpty(fgdwVO.getX1()) || ObjectUtils.isEmpty(fgdwVO.getY1()) || ObjectUtils.isEmpty(fgdwVO.getX2()) || ObjectUtils.isEmpty(fgdwVO.getY2())){ + return ResponseResult.fail(MessageUtils.getEditFailMsg() + "方格信息不准确,请选择其他方格"); + } + boolean isInGeometry = this.isInGeometry(fgdwVO, dto.getJd(), dto.getWd()); + if(!isInGeometry){ + return ResponseResult.fail(MessageUtils.getEditFailMsg() + "点位不在方格内,请重新选点"); + } + + //修改 + String resultId = tbZdxlFgdwBddService.updateEntity(dto); + if(StringUtils.isNotBlank(resultId)){ + return ResponseResult.success(resultId); + } + return ResponseResult.fail(MessageUtils.getEditFailMsg()); + } catch (Exception e) { + e.printStackTrace(); + return ResponseResult.fail(MessageUtils.getEditServerErrorMsg()); + } + } + + /** + * 注销单条 + * @param id 主键ID + * @return ResponseResult 注销条数 + */ + @ApiOperation(value = "注销单条") + @DeleteMapping("{id}") + @JwtSysUser + @Log(title = "指导巡逻-方格点位必到点接口-注销单条", businessType = BusinessType.DELETE) + public ResponseResult cancelById(@PathVariable("id") String id) { + try { + //如果传入的ID为空,返回失败 + if(StringUtils.isBlank(id)){ + return ResponseResult.fail(MessageUtils.getCancelFailMsg() + MessageUtils.message("id.bnwk")); + } + + //如果该实体已经被注销,则返回成功 + TbZdxlFgdwBdd entity = tbZdxlFgdwBddService.selectById(id); + if(entity == null){ + return ResponseResult.success(0); + } + + return ResponseResult.success(tbZdxlFgdwBddService.cancelEntity(entity)); + } catch (Exception e) { + return ResponseResult.fail(MessageUtils.getCancelServerErrorMsg()); + } + } + + /** + * 校验点位是否在方格中 + * @param fgdwVO 方格信息 + * @param jd 经度 + * @param wd 纬度 + * @return 是否在方格中 + */ + private boolean isInGeometry(TbZdxlFgdwVO fgdwVO, BigDecimal jd, BigDecimal wd){ + if(ObjectUtils.isEmpty(fgdwVO) || ObjectUtils.isEmpty(jd) || ObjectUtils.isEmpty(wd)){ + return false; + } + Coordinate leftTop = new Coordinate(fgdwVO.getX1().doubleValue(), fgdwVO.getY2().doubleValue()); + Coordinate rightTop = new Coordinate(fgdwVO.getX2().doubleValue(), fgdwVO.getY2().doubleValue()); + Coordinate leftBottom = new Coordinate(fgdwVO.getX1().doubleValue(), fgdwVO.getY1().doubleValue()); + Coordinate rightBottom = new Coordinate(fgdwVO.getX2().doubleValue(), fgdwVO.getY1().doubleValue()); + Coordinate[] coordinates = new Coordinate[4]; + coordinates[0] = leftTop; + coordinates[1] = rightTop; + coordinates[2] = rightBottom; + coordinates[3] = leftBottom; + return Kit.isInGeometryByRay(coordinates, jd + "," + wd); + } + +} diff --git a/mosty-yjzl/src/main/java/com/mosty/yjzl/controller/TbZdxlFgdwBddxlrwController.java b/mosty-yjzl/src/main/java/com/mosty/yjzl/controller/TbZdxlFgdwBddxlrwController.java new file mode 100644 index 0000000..dba4794 --- /dev/null +++ b/mosty-yjzl/src/main/java/com/mosty/yjzl/controller/TbZdxlFgdwBddxlrwController.java @@ -0,0 +1,26 @@ +package com.mosty.yjzl.controller; + +import io.swagger.annotations.Api; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author zhangzhao + * @description 指导巡逻方格点位必到点巡逻任务接口 + * @modifier zhangzhao + * @modifiedTime 2025/09/06 19:38 + * @since 2025/09/06 19:38 + */ +@Api(tags = {"指导巡逻-方格点位必到点巡逻任务接口"}) +@RestController +@AllArgsConstructor +@RequestMapping("/tbZdxlFgdwBddxlrw") +public class TbZdxlFgdwBddxlrwController { + + + + + + +} diff --git a/mosty-yjzl/src/main/java/com/mosty/yjzl/controller/TbZdxlFgdwBddxlrwJlController.java b/mosty-yjzl/src/main/java/com/mosty/yjzl/controller/TbZdxlFgdwBddxlrwJlController.java new file mode 100644 index 0000000..db55750 --- /dev/null +++ b/mosty-yjzl/src/main/java/com/mosty/yjzl/controller/TbZdxlFgdwBddxlrwJlController.java @@ -0,0 +1,133 @@ +package com.mosty.yjzl.controller; + +import com.mosty.base.model.dto.yjzl.TbZdxlFgdwBddxlrwJlClockInDTO; +import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgdwBddxlrwJl; +import com.mosty.base.utils.MessageUtils; +import com.mosty.base.utils.spring.SpringValidUtils; +import com.mosty.common.base.domain.ResponseResult; +import com.mosty.common.base.entity.log.BusinessType; +import com.mosty.common.base.entity.log.Log; +import com.mosty.common.token.JwtSysUser; +import com.mosty.common.token.UserInfo; +import com.mosty.common.token.UserInfoManager; +import com.mosty.yjzl.service.TbZdxlFgdwBddxlrwJlService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.Date; +import java.util.List; + +/** + * @author zhangzhao + * @description 指导巡逻方格点位必到点巡逻任务记录接口 + * @modifier zhangzhao + * @modifiedTime 2025/09/07 19:55 + * @since 2025/09/07 19:55 + */ +@Api(tags = {"指导巡逻-方格点位必到点巡逻任务记录接口"}) +@RestController +@AllArgsConstructor +@RequestMapping("/tbZdxlFgdwBddxlrwJl") +public class TbZdxlFgdwBddxlrwJlController { + + /** + * 指导巡逻方格点位必到点巡逻任务记录表Service + */ + private final TbZdxlFgdwBddxlrwJlService tbZdxlFgdwBddxlrwJlService; + + /** + * 查询列表(根据必到点巡逻任务ID) + * @param bddxlrwId 必到点巡逻任务ID + * @return ResponseResult 实体信息列表 + */ + @ApiOperation(value = "查询列表(根据必到点巡逻任务ID)") + @GetMapping("/selectListByBddxlrwId") + @JwtSysUser + @Log(title = "指导巡逻-方格点位必到点接口-查询列表(根据必到点巡逻任务ID)", businessType = BusinessType.OTHER) + public ResponseResult> selectListByBddxlrwId(String bddxlrwId) { + return ResponseResult.success(tbZdxlFgdwBddxlrwJlService.selectListByBddxlrwId(bddxlrwId)); + } + + /** + * 创建列表(根据方格巡逻任务ID) + * @param fgxlrwId 方格巡逻任务ID + * @return ResponseResult 实体信息列表 + */ + @ApiOperation(value = "创建列表(根据方格巡逻任务ID)") + @GetMapping("/createListByFgxlrwId") + @JwtSysUser + @Log(title = "指导巡逻-方格点位必到点接口-创建列表(根据方格巡逻任务ID)", businessType = BusinessType.OTHER) + public ResponseResult createListByFgxlrwId(String fgxlrwId) { + return ResponseResult.success(tbZdxlFgdwBddxlrwJlService.createListByFgxlrwId(fgxlrwId)); + } + + /** + * 保存单条 + * @param dto 打卡DTO对象 + * @param bindResult 校验对象 + * @return ResponseResult 实体主键ID + */ + @ApiOperation(value = "打卡") + @PostMapping("clockIn") + @JwtSysUser + @Log(title = "指导巡逻-方格点位必到点接口-打卡", businessType = BusinessType.INSERT) + public ResponseResult clockIn(@RequestBody @Valid TbZdxlFgdwBddxlrwJlClockInDTO dto, BindingResult bindResult) { + try { + //基础信息校验 + String message = SpringValidUtils.getErrorsMsg(bindResult); + if (StringUtils.isNotBlank(message)) { + return ResponseResult.fail(MessageUtils.getSaveFailMsg() + message); + } + + TbZdxlFgdwBddxlrwJl baseEntity = tbZdxlFgdwBddxlrwJlService.selectById(dto.getId()); + if(ObjectUtils.isEmpty(baseEntity)){ + return ResponseResult.fail(MessageUtils.getSaveFailMsg() + "打卡记录不存在,请退出页面重新进入"); + } + + //打卡时间 + Date dksj = new Date(); + + // TODO: 2025/9/7 需要加上方格内部和打卡点附近的坐标验证 + + //校验上一次打卡情况 + int lastSx = baseEntity.getDkSx() - 1; + if(lastSx > 0){ + TbZdxlFgdwBddxlrwJl lastEntity = tbZdxlFgdwBddxlrwJlService.selectByBddxlrwIdAndDkSx(baseEntity.getBddxlrwId(), lastSx); + if(ObjectUtils.isNotEmpty(lastEntity) && ObjectUtils.isEmpty(lastEntity.getDkJsSj())){ + return ResponseResult.fail(MessageUtils.getSaveFailMsg() + "请完成上一次打卡后,再进行本次打卡"); + } + } + + //如果是打结束卡,需要进行以下验证 + UserInfo user = UserInfoManager.get(); + if(ObjectUtils.isNotEmpty(baseEntity.getDkKsSj())){ + //开始和结束是否是同一个人 + if(!user.getIdEntityCard().equals(baseEntity.getDkrSfzh())){ + return ResponseResult.fail(MessageUtils.getSaveFailMsg() + "您不是此记录的打卡人,不能进行打卡"); + } + //是否待满10分钟 + if(dksj.getTime()-baseEntity.getDkKsSj().getTime() < 10*60*1000){ + return ResponseResult.fail(MessageUtils.getSaveFailMsg() + "请在开始10分后,再打卡结束"); + } + } + + //打卡 + String resultId = tbZdxlFgdwBddxlrwJlService.clockIn(baseEntity, dto, user, dksj); + if(StringUtils.isNotBlank(resultId)){ + return ResponseResult.success(resultId); + } + return ResponseResult.fail(MessageUtils.getSaveFailMsg()); + } catch (Exception e) { + e.printStackTrace(); + return ResponseResult.fail(MessageUtils.getSaveServerErrorMsg()); + } + } + + +} diff --git a/mosty-yjzl/src/main/java/com/mosty/yjzl/controller/TbZdxlFgdwController.java b/mosty-yjzl/src/main/java/com/mosty/yjzl/controller/TbZdxlFgdwController.java index 0307905..cc994f8 100644 --- a/mosty-yjzl/src/main/java/com/mosty/yjzl/controller/TbZdxlFgdwController.java +++ b/mosty-yjzl/src/main/java/com/mosty/yjzl/controller/TbZdxlFgdwController.java @@ -1,6 +1,8 @@ package com.mosty.yjzl.controller; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.mosty.base.model.dto.yjzl.TbZdxlFgdwUpdateDTO; +import com.mosty.base.model.query.yjzl.TbZdxlFgdwQuery; import com.mosty.base.model.vo.yjzl.TbZdxlFgdwVO; import com.mosty.base.utils.MessageUtils; import com.mosty.base.utils.spring.SpringValidUtils; @@ -38,7 +40,6 @@ public class TbZdxlFgdwController { */ private final TbZdxlFgdwService tbZdxlFgdwService; - /** * 查询单条(根据主键ID) * @param id 主键ID @@ -48,7 +49,7 @@ public class TbZdxlFgdwController { @GetMapping("{id}") @JwtSysUser @Log(title = "指导巡逻-方格点位接口-查询单条(根据主键ID)", businessType = BusinessType.OTHER) - public ResponseResult selectById(@PathVariable("id") Integer id) { + public ResponseResult selectById(@PathVariable("id") Long id) { return ResponseResult.success(tbZdxlFgdwService.selectById(id)); } @@ -64,6 +65,32 @@ public class TbZdxlFgdwController { return ResponseResult.success(tbZdxlFgdwService.selectAllList()); } + /** + * 查询分页 + * @param query 实体查询对象 + * @return ResponseResult 实体信息分页列表 + */ + @ApiOperation(value = "查询分页") + @GetMapping("/selectPage") + @JwtSysUser + @Log(title = "指导巡逻-方格点位接口-查询分页", businessType = BusinessType.OTHER) + public ResponseResult> selectPage(TbZdxlFgdwQuery query) { + return ResponseResult.success(tbZdxlFgdwService.selectPage(query)); + } + + /** + * 查询列表 + * @param query 实体查询对象 + * @return ResponseResult 实体信息列表 + */ + @ApiOperation(value = "查询列表") + @GetMapping("/selectList") + @JwtSysUser + @Log(title = "指导巡逻-方格点位接口-查询列表", businessType = BusinessType.OTHER) + public ResponseResult> selectList(TbZdxlFgdwQuery query) { + return ResponseResult.success(tbZdxlFgdwService.selectList(query)); + } + /** * 修改单条 * @param dto 修改DTO对象 @@ -74,7 +101,7 @@ public class TbZdxlFgdwController { @PostMapping("update") @JwtSysUser @Log(title = "指导巡逻-方格点位接口-修改单条", businessType = BusinessType.UPDATE) - public ResponseResult update(@RequestBody @Valid TbZdxlFgdwUpdateDTO dto, BindingResult bindResult){ + public ResponseResult update(@RequestBody @Valid TbZdxlFgdwUpdateDTO dto, BindingResult bindResult){ try { //基础信息校验 String message = SpringValidUtils.getErrorsMsg(bindResult); @@ -83,7 +110,7 @@ public class TbZdxlFgdwController { } //修改 - Integer resultId = tbZdxlFgdwService.updateEntity(dto); + Long resultId = tbZdxlFgdwService.updateEntity(dto); if(ObjectUtils.isNotEmpty(resultId)){ return ResponseResult.success(resultId); } diff --git a/mosty-yjzl/src/main/java/com/mosty/yjzl/controller/TbZdxlFgmrpzController.java b/mosty-yjzl/src/main/java/com/mosty/yjzl/controller/TbZdxlFgmrpzController.java new file mode 100644 index 0000000..1b5fd94 --- /dev/null +++ b/mosty-yjzl/src/main/java/com/mosty/yjzl/controller/TbZdxlFgmrpzController.java @@ -0,0 +1,71 @@ +package com.mosty.yjzl.controller; + +import com.mosty.base.model.dto.yjzl.TbZdxlFgmrpzUpdateDTO; +import com.mosty.base.utils.MessageUtils; +import com.mosty.base.utils.spring.SpringValidUtils; +import com.mosty.common.base.domain.ResponseResult; +import com.mosty.common.base.entity.log.BusinessType; +import com.mosty.common.base.entity.log.Log; +import com.mosty.common.base.util.StringUtils; +import com.mosty.common.token.JwtSysUser; +import com.mosty.yjzl.service.TbZdxlFgmrpzService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; + +/** + * @author zhangzhao + * @description 指导巡逻方格默认配置接口 + * @modifier zhangzhao + * @modifiedTime 2025/09/05 18:58 + * @since 2025/09/05 18:58 + */ +@Api(tags = {"指导巡逻-方格默认配置接口"}) +@RestController +@AllArgsConstructor +@RequestMapping("/tbZdxlFgmrpz") +public class TbZdxlFgmrpzController { + + /** + * 指导巡逻方格默认配置表Service + */ + private final TbZdxlFgmrpzService tbZdxlFgmrpzService; + + /** + * 修改单条 + * @param dto 修改DTO对象 + * @param bindResult 校验对象 + * @return ResponseResult 实体主键ID + */ + @ApiOperation(value = "修改单条") + @PostMapping("update") + @JwtSysUser + @Log(title = "指导巡逻-方格默认配置接口-修改单条", businessType = BusinessType.UPDATE) + public ResponseResult update(@RequestBody @Valid TbZdxlFgmrpzUpdateDTO dto, BindingResult bindResult){ + try { + //基础信息校验 + String message = SpringValidUtils.getErrorsMsg(bindResult); + if (StringUtils.isNotBlank(message)) { + return ResponseResult.fail(MessageUtils.getEditFailMsg() + message); + } + + //修改 + String resultId = tbZdxlFgmrpzService.updateEntity(dto); + if(StringUtils.isNotBlank(resultId)){ + return ResponseResult.success(resultId); + } + return ResponseResult.fail(MessageUtils.getEditFailMsg()); + } catch (Exception e) { + e.printStackTrace(); + return ResponseResult.fail(MessageUtils.getEditServerErrorMsg()); + } + } + +} diff --git a/mosty-yjzl/src/main/java/com/mosty/yjzl/controller/TbZdxlFgxlrwController.java b/mosty-yjzl/src/main/java/com/mosty/yjzl/controller/TbZdxlFgxlrwController.java index ae6d96a..4ee2efb 100644 --- a/mosty-yjzl/src/main/java/com/mosty/yjzl/controller/TbZdxlFgxlrwController.java +++ b/mosty-yjzl/src/main/java/com/mosty/yjzl/controller/TbZdxlFgxlrwController.java @@ -2,6 +2,7 @@ package com.mosty.yjzl.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.mosty.base.model.dto.yjzl.TbZdxlFgxlrwCreateDTO; +import com.mosty.base.model.dto.yjzl.TbZdxlFgxlrwIssueDTO; import com.mosty.base.model.dto.yjzl.TbZdxlFgxlrwUpdateDTO; import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgxlrw; import com.mosty.base.model.query.yjzl.TbZdxlFgxlrwQuery; @@ -14,11 +15,14 @@ import com.mosty.common.base.entity.log.Log; import com.mosty.common.base.util.StringUtils; import com.mosty.common.config.Excel.ExcelUtil; import com.mosty.common.token.JwtSysUser; +import com.mosty.yjzl.service.TbZdxlFgdwBddxlrwJlService; import com.mosty.yjzl.service.TbZdxlFgxlrwService; +import com.mosty.yjzl.utils.TbZdxlFgxlrwUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -26,6 +30,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.util.List; +import java.util.stream.Collectors; /** * @author zhangzhao @@ -45,6 +50,11 @@ public class TbZdxlFgxlrwController { */ private final TbZdxlFgxlrwService tbZdxlFgxlrwService; + /** + * 指导巡逻方格点位必到点巡逻任务记录表Service + */ + private final TbZdxlFgdwBddxlrwJlService tbZdxlFgdwBddxlrwJlService; + /** * 查询分页 * @param query 实体查询对象 @@ -58,6 +68,19 @@ public class TbZdxlFgxlrwController { return ResponseResult.success(tbZdxlFgxlrwService.selectPage(query)); } + /** + * 查询分页(需要执行的任务) + * @param query 实体查询对象 + * @return ResponseResult 实体返回信息分页列表 + */ + @ApiOperation(value = "查询分页(需要执行的任务)") + @GetMapping("/selectRwPage") + @JwtSysUser + @Log(title = "指导巡逻-方格巡逻任务接口-查询分页(需要执行的任务)", businessType = BusinessType.OTHER) + public ResponseResult> selectRwPage(TbZdxlFgxlrwQuery query) { + return ResponseResult.success(tbZdxlFgxlrwService.selectRwPage(query)); + } + /** * 查询列表 * @param query 实体查询对象 @@ -89,6 +112,14 @@ public class TbZdxlFgxlrwController { return ResponseResult.fail(MessageUtils.getEditFailMsg() + message); } + TbZdxlFgxlrw baseEntity = tbZdxlFgxlrwService.selectById(dto.getId()); + if(ObjectUtils.isEmpty(baseEntity)){ + return ResponseResult.fail(MessageUtils.getEditDataNotFoundMsg()); + } + if(!(TbZdxlFgxlrwUtils.DICT_ITEM_D_ZDXL_FGXLRW_RWZT_CJ.equals(baseEntity.getRwZt()) || TbZdxlFgxlrwUtils.DICT_ITEM_D_ZDXL_FGXLRW_RWZT_YDC.equals(baseEntity.getRwZt()))){ + return ResponseResult.fail(MessageUtils.getEditFailMsg() + "任务已下发,不能再进行修改"); + } + //修改 String resultId = tbZdxlFgxlrwService.updateEntity(dto); if(StringUtils.isNotBlank(resultId)){ @@ -145,12 +176,13 @@ public class TbZdxlFgxlrwController { public ResponseResult importListByMb(MultipartFile file) { try { ExcelUtil util = new ExcelUtil<>(TbZdxlFgxlrw.class); - List fgxlrwList = util.importExcel(file.getInputStream()); + List fgxlrwList = util.importExcel(file.getInputStream(), 1); if(CollectionUtils.isEmpty(fgxlrwList)){ - int resultInt = tbZdxlFgxlrwService.importListByMb(fgxlrwList); - if(resultInt > 0){ - return ResponseResult.success(resultInt); - } + return ResponseResult.fail(MessageUtils.getImportFailMsg() + "表格数据获取为空"); + } + int resultInt = tbZdxlFgxlrwService.importListByMb(fgxlrwList); + if(resultInt > 0){ + return ResponseResult.success(resultInt); } return ResponseResult.fail(MessageUtils.getImportFailMsg()); } catch (Exception e) { @@ -158,4 +190,49 @@ public class TbZdxlFgxlrwController { } } + /** + * 下发任务 + * @param dto 下发DTO对象 + * @return ResponseResult 实体主键ID + */ + @ApiOperation(value = "下发任务") + @PostMapping("issueList") + @JwtSysUser + @Log(title = "指导巡逻-方格巡逻任务接口-下发任务", businessType = BusinessType.UPDATE) + public ResponseResult issueList(@RequestBody TbZdxlFgxlrwIssueDTO dto){ + try { + //基础信息校验 + if(ObjectUtils.isEmpty(dto) || StringUtils.isBlank(dto.getIds())){ + return ResponseResult.fail(MessageUtils.getSaveFailMsg() + "请选择需要下发的任务"); + } + + List entityList = tbZdxlFgxlrwService.selectListByIds(dto.getIds()); + if(CollectionUtils.isEmpty(entityList)){ + return ResponseResult.fail(MessageUtils.getSaveFailMsg() + "您选择的任务不存在,请刷新页面后重新下发"); + } + + List issueList = entityList.stream() + .filter(entity -> TbZdxlFgxlrwUtils.DICT_ITEM_D_ZDXL_FGXLRW_RWZT_CJ.equals(entity.getRwZt()) || TbZdxlFgxlrwUtils.DICT_ITEM_D_ZDXL_FGXLRW_RWZT_YDC.equals(entity.getRwZt())) + .collect(Collectors.toList()); + if(CollectionUtils.isEmpty(issueList)){ + return ResponseResult.fail(MessageUtils.getSaveFailMsg() + "您选择的任务都已下发,请选择其他任务"); + } + + //下发 + int resultInt = tbZdxlFgxlrwService.issueList(issueList); + if(resultInt > 0){ + //新建打卡记录 + for(TbZdxlFgxlrw entity : issueList){ + tbZdxlFgdwBddxlrwJlService.createListByFgxlrwId(entity.getId()); + } + //返回 + return ResponseResult.success(resultInt); + } + return ResponseResult.fail(MessageUtils.getSaveFailMsg()); + } catch (Exception e) { + e.printStackTrace(); + return ResponseResult.fail(MessageUtils.getSaveServerErrorMsg()); + } + } + } diff --git a/mosty-yjzl/src/main/java/com/mosty/yjzl/mapper/TbZdxlFgdwBddMapper.java b/mosty-yjzl/src/main/java/com/mosty/yjzl/mapper/TbZdxlFgdwBddMapper.java new file mode 100644 index 0000000..6379711 --- /dev/null +++ b/mosty-yjzl/src/main/java/com/mosty/yjzl/mapper/TbZdxlFgdwBddMapper.java @@ -0,0 +1,17 @@ +package com.mosty.yjzl.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgdwBdd; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author zhangzhao + * @description 指导巡逻方格点位必到点表Mapper + * @modifier zhangzhao + * @modifiedTime 2025/09/06 14:17 + * @since 2025/09/06 14:17 + */ +@Mapper +public interface TbZdxlFgdwBddMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/mosty-yjzl/src/main/java/com/mosty/yjzl/mapper/TbZdxlFgdwBddxlrwJlMapper.java b/mosty-yjzl/src/main/java/com/mosty/yjzl/mapper/TbZdxlFgdwBddxlrwJlMapper.java new file mode 100644 index 0000000..607039a --- /dev/null +++ b/mosty-yjzl/src/main/java/com/mosty/yjzl/mapper/TbZdxlFgdwBddxlrwJlMapper.java @@ -0,0 +1,17 @@ +package com.mosty.yjzl.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgdwBddxlrwJl; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author zhangzhao + * @description 指导巡逻方格点位必到点巡逻任务记录表Mapper + * @modifier zhangzhao + * @modifiedTime 2025/09/07 19:58 + * @since 2025/09/07 19:58 + */ +@Mapper +public interface TbZdxlFgdwBddxlrwJlMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/mosty-yjzl/src/main/java/com/mosty/yjzl/mapper/TbZdxlFgdwBddxlrwMapper.java b/mosty-yjzl/src/main/java/com/mosty/yjzl/mapper/TbZdxlFgdwBddxlrwMapper.java new file mode 100644 index 0000000..f825557 --- /dev/null +++ b/mosty-yjzl/src/main/java/com/mosty/yjzl/mapper/TbZdxlFgdwBddxlrwMapper.java @@ -0,0 +1,17 @@ +package com.mosty.yjzl.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgdwBddxlrw; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author zhangzhao + * @description 指导巡逻方格点位必到点巡逻任务表Mapper + * @modifier zhangzhao + * @modifiedTime 2025/09/06 19:50 + * @since 2025/09/06 19:50 + */ +@Mapper +public interface TbZdxlFgdwBddxlrwMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/mosty-yjzl/src/main/java/com/mosty/yjzl/mapper/TbZdxlFgmrpzMapper.java b/mosty-yjzl/src/main/java/com/mosty/yjzl/mapper/TbZdxlFgmrpzMapper.java new file mode 100644 index 0000000..3085971 --- /dev/null +++ b/mosty-yjzl/src/main/java/com/mosty/yjzl/mapper/TbZdxlFgmrpzMapper.java @@ -0,0 +1,17 @@ +package com.mosty.yjzl.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgmrpz; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author zhangzhao + * @description 指导巡逻方格默认配置表Mapper + * @modifier zhangzhao + * @modifiedTime 2025/09/05 19:03 + * @since 2025/09/05 19:03 + */ +@Mapper +public interface TbZdxlFgmrpzMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/mosty-yjzl/src/main/java/com/mosty/yjzl/service/Impl/TbZdxlFgdwBddServiceImpl.java b/mosty-yjzl/src/main/java/com/mosty/yjzl/service/Impl/TbZdxlFgdwBddServiceImpl.java new file mode 100644 index 0000000..983e94b --- /dev/null +++ b/mosty-yjzl/src/main/java/com/mosty/yjzl/service/Impl/TbZdxlFgdwBddServiceImpl.java @@ -0,0 +1,247 @@ +package com.mosty.yjzl.service.Impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.mosty.base.model.dto.yjzl.TbZdxlFgdwBddSaveDTO; +import com.mosty.base.model.dto.yjzl.TbZdxlFgdwBddUpdateDTO; +import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgdw; +import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgdwBdd; +import com.mosty.base.model.query.yjzl.TbZdxlFgdwBddQuery; +import com.mosty.base.model.vo.yjzl.TbZdxlFgdwBddVO; +import com.mosty.base.utils.PageUtils; +import com.mosty.base.utils.QueryWrapperUtils; +import com.mosty.base.utils.UUIDGenerator; +import com.mosty.yjzl.mapper.TbZdxlFgdwBddMapper; +import com.mosty.yjzl.service.TbZdxlFgdwBddService; +import com.mosty.yjzl.service.TbZdxlFgdwService; +import lombok.AllArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author zhangzhao + * @description 指导巡逻方格点位必到点表Service实现类 + * @modifier zhangzhao + * @modifiedTime 2025/09/06 14:16 + * @since 2025/09/06 14:16 + */ +@Service +@AllArgsConstructor +public class TbZdxlFgdwBddServiceImpl extends ServiceImpl implements TbZdxlFgdwBddService { + + /** + * 指导巡逻方格点位表Service + */ + private final TbZdxlFgdwService tbZdxlFgdwService; + + @Override + public TbZdxlFgdwBdd selectById(String id) { + if (StringUtils.isBlank(id)) { + return null; + } + return this.baseMapper.selectOne(new QueryWrapper() + .eq(TbZdxlFgdwBdd.ID_FIELD, id) + .eq("xt_sjzt", "1") + .eq("xt_scbz", "0") + ); + } + + @Override + public IPage selectPage(TbZdxlFgdwBddQuery query) { + IPage page = PageUtils.buildPage(query.getPageSize(), query.getPageCurrent()); + QueryWrapper qw = new QueryWrapper<>(); + + //组装查询参数 + this.buildListSelectQueryWrapper(qw, query); + + //返回Page + IPage resultPage = new Page<>(query.getPageCurrent(), query.getPageSize()); + + //查询数据 + page = this.baseMapper.selectPage(page, qw); + List list = page.getRecords(); + if(CollectionUtils.isEmpty(list)){ + return resultPage; + } + + //转为VO + List resultList = this.buildAllInfoListByEntityList(list); + + //组装VO + resultPage.setRecords(resultList); + resultPage.setTotal(page.getTotal()); + return resultPage; + } + + @Override + public List selectList(TbZdxlFgdwBddQuery query) { + QueryWrapper qw = new QueryWrapper<>(); + + //组装查询参数 + this.buildListSelectQueryWrapper(qw, query); + + //查询数据 + List list = this.baseMapper.selectList(qw); + if(CollectionUtils.isEmpty(list)){ + return null; + } + + //转为VO返回 + return this.buildAllInfoListByEntityList(list); + } + + @Override + public List selectListByIdList(List idList) { + if(CollectionUtils.isEmpty(idList)){ + return null; + } + + //查询数据 + return this.baseMapper.selectList(new QueryWrapper() + .in(TbZdxlFgdwBdd.ID_FIELD, idList) + .eq("xt_sjzt", "1") + .eq("xt_scbz", "0") + ); + } + + @Override + public List selectListByFgdwId(Long fgdwId) { + if(ObjectUtils.isEmpty(fgdwId)){ + return null; + } + + //查询数据 + return this.baseMapper.selectList(new QueryWrapper() + .eq(TbZdxlFgdwBdd.FGDW_ID_FIELD, fgdwId) + .eq("xt_sjzt", "1") + .eq("xt_scbz", "0") + ); + } + + @Override + public List selectListByFgxlrwId(String fgxlrwId) { + if(ObjectUtils.isEmpty(fgxlrwId)){ + return null; + } + + //查询数据 + return this.baseMapper.selectList(new QueryWrapper() + .inSql(TbZdxlFgdwBdd.FGDW_ID_FIELD, "select fg_id from tb_zdxl_fgxlrw where xt_sjzt = '1' and xt_scbz = '0' and id = '" + fgxlrwId + "'") + .eq("xt_sjzt", "1") + .eq("xt_scbz", "0") + ); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String saveEntity(TbZdxlFgdwBddSaveDTO dto) { + //复制参数至实体 + TbZdxlFgdwBdd entity = BeanUtil.copyProperties(dto, TbZdxlFgdwBdd.class); + + //组装参数 + entity.setId(UUIDGenerator.getUUID()); + entity.setXtSjly("1"); + + //保存实体 + int resultInt = this.baseMapper.insert(entity); + if(resultInt > 0){ + //返回主键 + return entity.getId(); + } + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String updateEntity(TbZdxlFgdwBddUpdateDTO dto) { + //复制参数至实体 + TbZdxlFgdwBdd entity = BeanUtil.copyProperties(dto, TbZdxlFgdwBdd.class); + + //修改实体 + int resultInt = this.baseMapper.updateById(entity); + if(resultInt > 0){ + //返回主键 + return entity.getId(); + } + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int cancelEntity(TbZdxlFgdwBdd entity) { + //先修改系统字段 + TbZdxlFgdwBdd cancelEntity = new TbZdxlFgdwBdd(); + cancelEntity.setId(entity.getId()); + this.baseMapper.updateById(cancelEntity); + //再注销 + return this.baseMapper.deleteById(entity.getId()); + } + + /** + * 组装查询参数 + * @param qw QueryWrapper + * @param query 查询对象 + */ + private void buildListSelectQueryWrapper(QueryWrapper qw, TbZdxlFgdwBddQuery query){ + //组装其他排序方式 + QueryWrapperUtils.buildQueryWrapperOrder(qw, query.getSort(), query.getOrder()); + //未注销数据 + qw.eq("xt_sjzt", "1").eq("xt_scbz", "0"); + + //方格点位ID + qw.like(ObjectUtils.isNotEmpty(query.getFgdwId()), TbZdxlFgdwBdd.FGDW_ID_FIELD, query.getFgdwId()); + //必到点名称 + qw.like(StringUtils.isNotBlank(query.getBddMc()), TbZdxlFgdwBdd.BDD_MC_FIELD, query.getBddMc()); + //必到点地址 + qw.like(StringUtils.isNotBlank(query.getBddDz()), TbZdxlFgdwBdd.BDD_DZ_FIELD, query.getBddDz()); + } + + /** + * 组装全量信息列表(根据实体列表) + * @param entityList 实体列表 + * @return 全量信息列表 + */ + private List buildAllInfoListByEntityList(List entityList){ + List allInfoVOList = new ArrayList<>(); + //组装返回数据 + for(TbZdxlFgdwBdd entity : entityList){ + TbZdxlFgdwBddVO resultVO = this.buildAllInfoByEntity(entity); + allInfoVOList.add(resultVO); + } + //返回列表 + if(CollectionUtils.isEmpty(allInfoVOList)){ + return null; + } + return allInfoVOList; + } + + /** + * 组装全量信息(根据实体信息) + * @param entity 实体信息 + * @return 全量信息 + */ + private TbZdxlFgdwBddVO buildAllInfoByEntity(TbZdxlFgdwBdd entity){ + TbZdxlFgdwBddVO resultVO = BeanUtil.copyProperties(entity, TbZdxlFgdwBddVO.class); + + if(ObjectUtils.isNotEmpty(resultVO.getFgdwId())){ + //组装方格数据 + TbZdxlFgdw fg = tbZdxlFgdwService.selectById(resultVO.getFgdwId()); + if(ObjectUtils.isNotEmpty(fg)){ + resultVO.setFgdwMc(fg.getMc1()); + } + + } + + return resultVO; + } + +} diff --git a/mosty-yjzl/src/main/java/com/mosty/yjzl/service/Impl/TbZdxlFgdwBddxlrwJlServiceImpl.java b/mosty-yjzl/src/main/java/com/mosty/yjzl/service/Impl/TbZdxlFgdwBddxlrwJlServiceImpl.java new file mode 100644 index 0000000..1a565ec --- /dev/null +++ b/mosty-yjzl/src/main/java/com/mosty/yjzl/service/Impl/TbZdxlFgdwBddxlrwJlServiceImpl.java @@ -0,0 +1,150 @@ +package com.mosty.yjzl.service.Impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.mosty.base.model.dto.yjzl.TbZdxlFgdwBddxlrwJlClockInDTO; +import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgdwBddxlrw; +import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgdwBddxlrwJl; +import com.mosty.base.utils.UUIDGenerator; +import com.mosty.common.token.UserInfo; +import com.mosty.yjzl.mapper.TbZdxlFgdwBddxlrwJlMapper; +import com.mosty.yjzl.service.TbZdxlFgdwBddxlrwJlService; +import com.mosty.yjzl.service.TbZdxlFgdwBddxlrwService; +import lombok.AllArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @author zhangzhao + * @description 指导巡逻方格点位必到点巡逻任务记录表Service实现类 + * @modifier zhangzhao + * @modifiedTime 2025/09/07 19:57 + * @since 2025/09/07 19:57 + */ +@Service +@AllArgsConstructor +public class TbZdxlFgdwBddxlrwJlServiceImpl extends ServiceImpl implements TbZdxlFgdwBddxlrwJlService { + + /** + * 指导巡逻方格点位必到点巡逻任务表Service + */ + private final TbZdxlFgdwBddxlrwService tbZdxlFgdwBddxlrwService; + + @Override + public TbZdxlFgdwBddxlrwJl selectById(String id) { + if (StringUtils.isBlank(id)) { + return null; + } + return this.baseMapper.selectOne(new QueryWrapper() + .eq(TbZdxlFgdwBddxlrwJl.ID_FIELD, id) + .eq("xt_sjzt", "1") + .eq("xt_scbz", "0") + ); + } + + @Override + public TbZdxlFgdwBddxlrwJl selectByBddxlrwIdAndDkSx(String bddxlrwId, int dkSx) { + if(StringUtils.isBlank(bddxlrwId)){ + return null; + } + return this.baseMapper.selectOne(new QueryWrapper() + .eq(TbZdxlFgdwBddxlrwJl.BDDXLRW_ID_FIELD, bddxlrwId) + .eq(TbZdxlFgdwBddxlrwJl.DK_SX_FIELD, dkSx) + .eq("xt_sjzt", "1") + .eq("xt_scbz", "0") + ); + } + + @Override + public List selectListByBddxlrwId(String bddxlrwId) { + if(ObjectUtils.isEmpty(bddxlrwId)){ + return null; + } + + return this.baseMapper.selectList(new QueryWrapper() + .eq(TbZdxlFgdwBddxlrwJl.BDDXLRW_ID_FIELD, bddxlrwId) + .eq("xt_sjzt", "1") + .eq("xt_scbz", "0") + .orderByAsc(TbZdxlFgdwBddxlrwJl.DK_SX_FIELD) + ); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int createListByFgxlrwId(String fgxlrwId) { + if(StringUtils.isBlank(fgxlrwId)){ + return -1; + } + + List bddxlrwList = tbZdxlFgdwBddxlrwService.selectListByFgxlrwId(fgxlrwId); + if(CollectionUtils.isEmpty(bddxlrwList)){ + return -2; + } + + //循环组装数据 + List saveList = new ArrayList<>(); + for(TbZdxlFgdwBddxlrw bbdxlrw : bddxlrwList){ + if(ObjectUtils.isEmpty(bbdxlrw.getXlghDkcs())){ + continue; + } + + for(int i = 1 ; i <= bbdxlrw.getXlghDkcs() ; i++){ + TbZdxlFgdwBddxlrwJl entity = new TbZdxlFgdwBddxlrwJl(); + entity.setId(UUIDGenerator.getUUID()); + entity.setBddxlrwId(bbdxlrw.getId()); + entity.setDkSx(i); + entity.setXtSjly("1"); + saveList.add(entity); + } + } + + boolean success = this.saveBatch(saveList); + if(success){ + return saveList.size(); + } + return 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String clockIn(TbZdxlFgdwBddxlrwJl baseEntity, TbZdxlFgdwBddxlrwJlClockInDTO dto, UserInfo user, Date dksj) { + if(ObjectUtils.isEmpty(baseEntity) || ObjectUtils.isEmpty(dto) || ObjectUtils.isEmpty(user)){ + return null; + } + + boolean start = ObjectUtils.isEmpty(baseEntity.getDkKsSj()); + if(start){ + //开始 + baseEntity.setDkKsSj(dksj); + baseEntity.setDkKsFj(dto.getDkFj()); + baseEntity.setDkKsJd(dto.getDkJd()); + baseEntity.setDkKsWd(dto.getDkWd()); + baseEntity.setDkrXm(user.getUserName()); + baseEntity.setDkrSfzh(user.getIdEntityCard()); + }else{ + //结束 + baseEntity.setDkJsSj(dksj); + baseEntity.setDkJsFj(dto.getDkFj()); + baseEntity.setDkJsJd(dto.getDkJd()); + baseEntity.setDkJsWd(dto.getDkWd()); + } + + int resultInt = this.baseMapper.updateById(baseEntity); + if(resultInt > 0){ + //保存成功后,同步必到点状态 + tbZdxlFgdwBddxlrwService.clockInByJl(baseEntity, start); + //返回 + return baseEntity.getId(); + } + return null; + } + + +} diff --git a/mosty-yjzl/src/main/java/com/mosty/yjzl/service/Impl/TbZdxlFgdwBddxlrwServiceImpl.java b/mosty-yjzl/src/main/java/com/mosty/yjzl/service/Impl/TbZdxlFgdwBddxlrwServiceImpl.java new file mode 100644 index 0000000..7535af3 --- /dev/null +++ b/mosty-yjzl/src/main/java/com/mosty/yjzl/service/Impl/TbZdxlFgdwBddxlrwServiceImpl.java @@ -0,0 +1,344 @@ +package com.mosty.yjzl.service.Impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.mosty.base.model.dto.yjzl.TbZdxlFgdwBddxlrwHandleDTO; +import com.mosty.base.model.entity.yjzl.zddw.*; +import com.mosty.base.model.vo.yjzl.TbZdxlFgdwBddxlrwVO; +import com.mosty.base.utils.Constant; +import com.mosty.base.utils.MathUtils; +import com.mosty.base.utils.UUIDGenerator; +import com.mosty.yjzl.mapper.TbZdxlFgdwBddxlrwMapper; +import com.mosty.yjzl.service.TbZdxlFgdwBddService; +import com.mosty.yjzl.service.TbZdxlFgdwBddxlrwService; +import com.mosty.yjzl.service.TbZdxlFgmrpzService; +import lombok.AllArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author zhangzhao + * @description 指导巡逻方格点位必到点巡逻任务表Service实现类 + * @modifier zhangzhao + * @modifiedTime 2025/09/06 19:49 + * @since 2025/09/06 19:49 + */ +@Service +@AllArgsConstructor +public class TbZdxlFgdwBddxlrwServiceImpl extends ServiceImpl implements TbZdxlFgdwBddxlrwService { + + /** + * 指导巡逻方格点位必到点表Service + */ + private final TbZdxlFgdwBddService tbZdxlFgdwBddService; + + /** + * 指导巡逻方格默认配置表Service + */ + private final TbZdxlFgmrpzService tbZdxlFgmrpzService; + + @Override + public TbZdxlFgdwBddxlrw selectById(String id) { + if(ObjectUtils.isEmpty(id)){ + return null; + } + + //查询已配置的任务数据 + return this.baseMapper.selectOne(new QueryWrapper() + .eq(TbZdxlFgdwBddxlrw.ID_FIELD, id) + .eq("xt_sjzt", "1") + .eq("xt_scbz", "0") + ); + } + + @Override + public List selectListByFgxlrwId(String fgxlrwId) { + if(ObjectUtils.isEmpty(fgxlrwId)){ + return null; + } + + //查询已配置的任务数据 + return this.baseMapper.selectList(new QueryWrapper() + .eq(TbZdxlFgdwBddxlrw.FGXLRW_ID_FIELD, fgxlrwId) + .eq("xt_sjzt", "1") + .eq("xt_scbz", "0") + ); + } + + @Override + public List selectVoListByYxfFgxlrwId(String fgxlrwId) { + if(ObjectUtils.isEmpty(fgxlrwId)){ + return null; + } + + //查询已配置的任务数据 + List entityList = this.baseMapper.selectList(new QueryWrapper() + .eq(TbZdxlFgdwBddxlrw.FGXLRW_ID_FIELD, fgxlrwId) + .eq("xt_sjzt", "1") + .eq("xt_scbz", "0") + ); + + //组装并返回数据 + return this.buildAllInfoList(entityList, null, fgxlrwId); + } + + @Override + public List selectVoListByFgxlrwId(String fgxlrwId) { + if(ObjectUtils.isEmpty(fgxlrwId)){ + return null; + } + + //查询已配置的任务数据 + List entityList = this.baseMapper.selectList(new QueryWrapper() + .eq(TbZdxlFgdwBddxlrw.FGXLRW_ID_FIELD, fgxlrwId) + .eq("xt_sjzt", "1") + .eq("xt_scbz", "0") + ); + //查询所有必到点 + List bddList = tbZdxlFgdwBddService.selectListByFgxlrwId(fgxlrwId); + + //组装并返回数据 + return this.buildAllInfoList(entityList, bddList, fgxlrwId); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int handleList(List handleList) { + if(CollectionUtils.isEmpty(handleList)){ + return -1; + } + + //筛选数据 + List saveDtoList = handleList.stream().filter(dto -> ObjectUtils.isEmpty(dto.getId())).collect(Collectors.toList()); + List updateDtoList = handleList.stream().filter(dto -> ObjectUtils.isNotEmpty(dto.getId())).collect(Collectors.toList()); + List saveList = new ArrayList<>(), updateList = new ArrayList<>(); + + //组装保存列表 + if(CollectionUtils.isNotEmpty(saveDtoList)){ + for(TbZdxlFgdwBddxlrwHandleDTO dto : saveDtoList){ + TbZdxlFgdwBddxlrw entity = BeanUtil.copyProperties(dto, TbZdxlFgdwBddxlrw.class); + //组装参数 + entity.setId(UUIDGenerator.getUUID()); + entity.setXtSjly("1"); + saveList.add(entity); + } + } + + //组装修改列表 + if(CollectionUtils.isNotEmpty(updateDtoList)){ + for(TbZdxlFgdwBddxlrwHandleDTO dto : saveDtoList){ + TbZdxlFgdwBddxlrw entity = new TbZdxlFgdwBddxlrw(); + entity.setId(dto.getId()); + entity.setXlghDkcs(dto.getXlghDkcs()); + updateList.add(entity); + } + } + + //保存或修改信息 + int resultInt = 0; + if(CollectionUtils.isNotEmpty(saveList)){ + boolean success = this.saveBatch(saveList); + if(success){ + resultInt += saveList.size(); + } + } + if(CollectionUtils.isNotEmpty(updateList)){ + boolean success = this.updateBatchById(updateList); + if(success){ + resultInt += updateList.size(); + } + } + return resultInt; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int handleListByFgxlrwList(List fgxlrwList) { + if(CollectionUtils.isEmpty(fgxlrwList)){ + return -1; + } + + //通过查询vo列表,组装成dto列表,进行保存 + int resultInt = 0; + for(TbZdxlFgxlrw fgxlrw : fgxlrwList){ + List voList = this.selectVoListByFgxlrwId(fgxlrw.getId()); + if(CollectionUtils.isEmpty(voList)){ + continue; + } + List dtoList = new ArrayList<>(); + for(TbZdxlFgdwBddxlrwVO vo : voList){ + TbZdxlFgdwBddxlrwHandleDTO dto = BeanUtil.copyProperties(vo, TbZdxlFgdwBddxlrwHandleDTO.class); + dtoList.add(dto); + } + resultInt += this.handleList(dtoList); + } + + return resultInt; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String clockInByJl(TbZdxlFgdwBddxlrwJl jl, boolean start) { + if(ObjectUtils.isEmpty(jl) || ObjectUtils.isEmpty(jl.getBddxlrwId())){ + return null; + } + + TbZdxlFgdwBddxlrw baseEntity = this.selectById(jl.getBddxlrwId()); + if(ObjectUtils.isEmpty(baseEntity)){ + return null; + } + + TbZdxlFgdwBddxlrw updateEntity = new TbZdxlFgdwBddxlrw(); + updateEntity.setId(baseEntity.getId()); + + //修改开始状态 + if(Constant.DICT_ITEM_D_BZ_SF_NO.equals(baseEntity.getSfKs())){ + updateEntity.setSfKs(Constant.DICT_ITEM_D_BZ_SF_YES); + } + + //判断是否修改结束状态 + if(baseEntity.getXlghDkcs().equals(jl.getDkSx()) && !start){ + //规划打卡次数与记录打卡相同,则表示是最后一次打卡,如果是结束打卡,则可以将状态改为结束 + updateEntity.setSfJs(Constant.DICT_ITEM_D_BZ_SF_YES); + } + + //结束打卡,增加次数 + if(!start){ + int newSjDkCs = baseEntity.getXlsjDkcs() + 1; + if(newSjDkCs > baseEntity.getXlghDkcs()){ + newSjDkCs = baseEntity.getXlghDkcs(); + } + updateEntity.setXlsjDkcs(newSjDkCs); + } + + int resultInt = this.baseMapper.updateById(updateEntity); + if(resultInt > 0){ + return baseEntity.getId(); + } + return null; + } + + + /** + * 组装全量信息列表(根据实体列表、必到点列表) + * @param entityList 实体列表 + * @param bddList 必到点列表 + * @param fgxlrwId 方格巡逻任务ID + * @return 全量信息列表 + */ + private List buildAllInfoList(List entityList, List bddList, String fgxlrwId){ + if(CollectionUtils.isEmpty(entityList) && CollectionUtils.isEmpty(bddList)){ + return null; + } + + //组装实体数据 + Map entityMap = new HashMap<>(); + List allInfoVoList = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(entityList)){ + List entityAllInfoList = this.buildAllInfoListByEntityList(entityList); + if(CollectionUtils.isNotEmpty(entityAllInfoList)){ + allInfoVoList.addAll(entityAllInfoList); + } + entityMap = entityList.stream().collect(Collectors.toMap(TbZdxlFgdwBddxlrw::getBddId, Function.identity(), (key1, key2) -> key2)); + } + + //组装必到点数据 + if(CollectionUtils.isNotEmpty(bddList)){ + Map finalEntityMap = entityMap; + List bddNotCreateList = bddList.stream().filter(bdd -> !finalEntityMap.containsKey(bdd.getId())).collect(Collectors.toList()); + if(CollectionUtils.isNotEmpty(bddNotCreateList)){ + List bddAllInfoList = this.buildAllInfoListByBddList(bddNotCreateList, fgxlrwId); + if(CollectionUtils.isNotEmpty(bddAllInfoList)){ + allInfoVoList.addAll(bddAllInfoList); + } + } + } + + return allInfoVoList; + } + + /** + * 组装全量信息列表(根据必到点列表) + * @param bddList 必到点列表 + * @param fgxlrwId 方格巡逻任务ID + * @return 全量信息列表 + */ + private List buildAllInfoListByBddList(List bddList, String fgxlrwId){ + if(CollectionUtils.isEmpty(bddList)){ + return null; + } + + TbZdxlFgmrpz mrpz = tbZdxlFgmrpzService.selectDefault(); + if(ObjectUtils.isEmpty(mrpz)){ + return null; + } + + List allInfoVOList = new ArrayList<>(); + for(TbZdxlFgdwBdd bdd : bddList){ + TbZdxlFgdwBddxlrwVO vo = new TbZdxlFgdwBddxlrwVO(); + + vo.setBddMc(bdd.getBddMc()); + vo.setBddId(bdd.getId()); + vo.setFgxlrwId(fgxlrwId); + vo.setXlghDkcs(mrpz.getFgDkcs()); + vo.setXlsjDkcs(0); + vo.setSfKs(Constant.DICT_ITEM_D_BZ_SF_NO); + vo.setSfJs(Constant.DICT_ITEM_D_BZ_SF_NO); + allInfoVOList.add(vo); + } + + return allInfoVOList; + } + + /** + * 组装全量信息列表(根据实体列表) + * @param entityList 实体列表 + * @return 全量信息列表 + */ + private List buildAllInfoListByEntityList(List entityList){ + List allInfoVOList = new ArrayList<>(); + //组装返回数据 + for(TbZdxlFgdwBddxlrw entity : entityList){ + TbZdxlFgdwBddxlrwVO resultVO = this.buildAllInfoByEntity(entity); + allInfoVOList.add(resultVO); + } + //返回列表 + if(CollectionUtils.isEmpty(allInfoVOList)){ + return null; + } + return allInfoVOList; + } + + /** + * 组装全量信息(根据实体信息) + * @param entity 实体信息 + * @return 全量信息 + */ + private TbZdxlFgdwBddxlrwVO buildAllInfoByEntity(TbZdxlFgdwBddxlrw entity){ + TbZdxlFgdwBddxlrwVO resultVO = BeanUtil.copyProperties(entity, TbZdxlFgdwBddxlrwVO.class); + + //组装必到点信息 + if(ObjectUtils.isNotEmpty(resultVO.getBddId())){ + TbZdxlFgdwBdd bdd = tbZdxlFgdwBddService.selectById(resultVO.getBddId()); + if(ObjectUtils.isNotEmpty(bdd)){ + resultVO.setBddMc(bdd.getBddMc()); + } + } + + //计算进度 + resultVO.setBddProgress(MathUtils.percentage(entity.getXlsjDkcs(), entity.getXlghDkcs())); + + return resultVO; + } + +} diff --git a/mosty-yjzl/src/main/java/com/mosty/yjzl/service/Impl/TbZdxlFgdwServiceImpl.java b/mosty-yjzl/src/main/java/com/mosty/yjzl/service/Impl/TbZdxlFgdwServiceImpl.java index 42915cb..8c03a7f 100644 --- a/mosty-yjzl/src/main/java/com/mosty/yjzl/service/Impl/TbZdxlFgdwServiceImpl.java +++ b/mosty-yjzl/src/main/java/com/mosty/yjzl/service/Impl/TbZdxlFgdwServiceImpl.java @@ -2,10 +2,16 @@ package com.mosty.yjzl.service.Impl; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mosty.base.model.dto.yjzl.TbZdxlFgdwUpdateDTO; import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgdw; +import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgdw; +import com.mosty.base.model.query.yjzl.TbZdxlFgdwQuery; import com.mosty.base.model.vo.yjzl.TbZdxlFgdwVO; +import com.mosty.base.utils.PageUtils; +import com.mosty.base.utils.QueryWrapperUtils; import com.mosty.yjzl.mapper.TbZdxlFgdwMapper; import com.mosty.yjzl.service.TbZdxlFgdwService; import lombok.AllArgsConstructor; @@ -14,9 +20,8 @@ import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.math.BigDecimal; -import java.util.*; -import java.util.stream.Collectors; +import java.util.ArrayList; +import java.util.List; /** * @author zhangzhao @@ -30,7 +35,7 @@ import java.util.stream.Collectors; public class TbZdxlFgdwServiceImpl extends ServiceImpl implements TbZdxlFgdwService { @Override - public TbZdxlFgdwVO selectById(Integer id) { + public TbZdxlFgdwVO selectById(Long id) { if(ObjectUtils.isEmpty(id)){ return null; } @@ -49,96 +54,52 @@ public class TbZdxlFgdwServiceImpl extends ServiceImpl saveList, String firstMc) { - if(CollectionUtils.isEmpty(saveList)){ - return -1; + public IPage selectPage(TbZdxlFgdwQuery query) { + IPage page = PageUtils.buildPage(query.getPageSize(), query.getPageCurrent()); + QueryWrapper qw = new QueryWrapper<>(); + + //组装查询参数 + this.buildListSelectQueryWrapper(qw, query); + + //返回Page + IPage resultPage = new Page<>(query.getPageCurrent(), query.getPageSize()); + + //查询数据 + page = this.baseMapper.selectPage(page, qw); + List list = page.getRecords(); + if(CollectionUtils.isEmpty(list)){ + return resultPage; } - //获取基准方格,baseLeftTopDw表示最左侧一列从上向下第一个方格,baseTopLeftDw表示最上一行从左向右第一个方格 - TbZdxlFgdw baseLeftTopDw = new TbZdxlFgdw(), baseTopLeftDw = new TbZdxlFgdw(); - for(TbZdxlFgdw dw : saveList){ - //x11取最小值,y11取最大值 - if(ObjectUtils.isEmpty(baseLeftTopDw.getX11()) && ObjectUtils.isEmpty(baseLeftTopDw.getY11())){ - baseLeftTopDw = dw; - } else if (dw.getX11().compareTo(baseLeftTopDw.getX11()) < 0){ - baseLeftTopDw = dw; - } else if (dw.getX11().compareTo(baseLeftTopDw.getX11()) == 0 && dw.getY11().compareTo(baseLeftTopDw.getY11()) >= 0){ - baseLeftTopDw = dw; - } + //转为VO + List resultList = this.buildAllInfoListByEntityList(list); - //y21取最大值,x21取最小值 - if(ObjectUtils.isEmpty(baseTopLeftDw.getX21()) && ObjectUtils.isEmpty(baseTopLeftDw.getY21())){ - baseTopLeftDw = dw; - }else if (dw.getY21().compareTo(baseTopLeftDw.getY21()) > 0){ - baseTopLeftDw = dw; - }else if (dw.getY21().compareTo(baseTopLeftDw.getY21()) == 0 && dw.getX21().compareTo(baseTopLeftDw.getX21()) <= 0){ - baseTopLeftDw = dw; - } + //组装VO + resultPage.setRecords(resultList); + resultPage.setTotal(page.getTotal()); + return resultPage; + } + + @Override + public List selectList(TbZdxlFgdwQuery query) { + QueryWrapper qw = new QueryWrapper<>(); + + //组装查询参数 + this.buildListSelectQueryWrapper(qw, query); + + //查询数据 + List list = this.baseMapper.selectList(qw); + if(CollectionUtils.isEmpty(list)){ + return null; } - //按列循环,赋值中间名,从基准方格中,取x11的值为开始 - Map entityMap = new HashMap<>(); - BigDecimal baseLeftTopDwX11 = baseLeftTopDw.getX11(); - char letter = 'A'; - while (baseLeftTopDwX11 != null) { - BigDecimal finalBaseLeftTopDwX11 = baseLeftTopDwX11; - //查询x11相同的方格,按y11正序排列,开始取名 - List dwList = saveList.stream() - .filter(entity -> entity.getX11().compareTo(finalBaseLeftTopDwX11) == 0) - .sorted(Comparator.comparing(TbZdxlFgdw::getY11)) - .collect(Collectors.toList()); - if(CollectionUtils.isNotEmpty(dwList)){ - //如果查询出来的列表不为空,则需要将列表中的x21赋值给baseLeftTopDwX11,以进行下次循环 - baseLeftTopDwX11 = dwList.get(0).getX21(); - //同一列的名称,中间名相同 - for(TbZdxlFgdw entity : dwList){ - entity.setMc1(firstMc + "-" + letter); - entityMap.put("" + entity.getX11() + entity.getY11(), entity); - } - letter++; - if(letter > 'Z'){ - letter = 'A'; - } - }else{ - baseLeftTopDwX11 = null; - } - } - - //按行循环,赋值尾名,从基准方格中,取y21的值为开始 - BigDecimal baseTopLeftDwY21 = baseTopLeftDw.getY21(); - int i = 1; - while (baseTopLeftDwY21 != null) { - BigDecimal finalBaseTopLeftDwY21 = baseTopLeftDwY21; - //查询y21相同的方格,按x21正序排列,开始取名 - List dwList = saveList.stream() - .filter(entity -> entity.getY21().compareTo(finalBaseTopLeftDwY21) == 0) - .sorted(Comparator.comparing(TbZdxlFgdw::getX21)) - .collect(Collectors.toList()); - if(CollectionUtils.isNotEmpty(dwList)){ - //如果查询出来的列表不为空,则需要将列表中的y11赋值给baseTopLeftDwY21,以进行下次循环 - baseTopLeftDwY21 = dwList.get(0).getY11(); - //同一行的名称,尾名相同 - for(TbZdxlFgdw entity : dwList){ - TbZdxlFgdw mcEntity = entityMap.get("" + entity.getX11() + entity.getY11()); - mcEntity.setMc1(entity.getMc1() + "-" + i); - entityMap.put("" + entity.getX11() + entity.getY11(), mcEntity); - } - i++; - }else{ - baseTopLeftDwY21 = null; - } - } - - boolean success = this.saveBatch(entityMap.values()); - if(success){ - return entityMap.values().size(); - } - return 0; + //转为VO返回 + return this.buildAllInfoListByEntityList(list); } @Override @Transactional(rollbackFor = Exception.class) - public Integer updateEntity(TbZdxlFgdwUpdateDTO dto) { + public Long updateEntity(TbZdxlFgdwUpdateDTO dto) { //复制参数至实体 TbZdxlFgdw entity = BeanUtil.copyProperties(dto, TbZdxlFgdw.class); entity.setMc1(dto.getMc()); @@ -152,6 +113,22 @@ public class TbZdxlFgdwServiceImpl extends ServiceImpl qw, TbZdxlFgdwQuery query){ + //组装其他排序方式 + QueryWrapperUtils.buildQueryWrapperOrder(qw, query.getSort(), query.getOrder()); + //未注销数据 + qw.eq("xt_sjzt", "1").eq("xt_scbz", "0"); + + //方格点位ID + qw.like(ObjectUtils.isNotEmpty(query.getMc()), TbZdxlFgdw.MC, query.getMc()); + + } + /** * 组装全量信息列表(根据实体列表) * @param entityList 实体列表 diff --git a/mosty-yjzl/src/main/java/com/mosty/yjzl/service/Impl/TbZdxlFgmrpzServiceImpl.java b/mosty-yjzl/src/main/java/com/mosty/yjzl/service/Impl/TbZdxlFgmrpzServiceImpl.java new file mode 100644 index 0000000..28ab8ca --- /dev/null +++ b/mosty-yjzl/src/main/java/com/mosty/yjzl/service/Impl/TbZdxlFgmrpzServiceImpl.java @@ -0,0 +1,58 @@ +package com.mosty.yjzl.service.Impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.mosty.base.model.dto.yjzl.TbZdxlFgmrpzUpdateDTO; +import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgmrpz; +import com.mosty.yjzl.mapper.TbZdxlFgmrpzMapper; +import com.mosty.yjzl.service.TbZdxlFgmrpzService; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.stereotype.Service; + +/** + * @author zhangzhao + * @description 指导巡逻方格默认配置表Service实现类 + * @modifier zhangzhao + * @modifiedTime 2025/09/05 19:02 + * @since 2025/09/05 19:02 + */ +@Service +@AllArgsConstructor +public class TbZdxlFgmrpzServiceImpl extends ServiceImpl implements TbZdxlFgmrpzService { + + @Override + public TbZdxlFgmrpz selectDefault() { + return this.baseMapper.selectOne(new QueryWrapper<>()); + } + + @Override + public String updateEntity(TbZdxlFgmrpzUpdateDTO dto) { + //复制参数至实体 + TbZdxlFgmrpz entity = BeanUtil.copyProperties(dto, TbZdxlFgmrpz.class); + + //如果参数为空,则设置默认值为0 + if(ObjectUtils.isEmpty(entity.getPcCl())){ + entity.setPcCl(0); + } + if(ObjectUtils.isEmpty(entity.getPcRy())){ + entity.setPcRy(0); + } + if(ObjectUtils.isEmpty(entity.getXlSc())){ + entity.setXlSc(0.0); + } + if(ObjectUtils.isEmpty(entity.getXlLc())){ + entity.setXlLc(0.0); + } + + //修改实体 + int resultInt = this.baseMapper.updateById(entity); + if(resultInt > 0){ + //返回主键 + return entity.getId(); + } + return null; + } + +} diff --git a/mosty-yjzl/src/main/java/com/mosty/yjzl/service/Impl/TbZdxlFgxlrwServiceImpl.java b/mosty-yjzl/src/main/java/com/mosty/yjzl/service/Impl/TbZdxlFgxlrwServiceImpl.java index 31bee3a..5b3f9d0 100644 --- a/mosty-yjzl/src/main/java/com/mosty/yjzl/service/Impl/TbZdxlFgxlrwServiceImpl.java +++ b/mosty-yjzl/src/main/java/com/mosty/yjzl/service/Impl/TbZdxlFgxlrwServiceImpl.java @@ -5,16 +5,25 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.mosty.base.feign.remote.MostyQwzxFeignServiceRemote; +import com.mosty.base.model.dto.qwzx.TbQwXfbbVo; import com.mosty.base.model.dto.yjzl.TbZdxlFgxlrwUpdateDTO; +import com.mosty.base.model.entity.qwzx.TbQwXfbb; import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgdw; +import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgmrpz; import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgxlrw; import com.mosty.base.model.query.yjzl.TbZdxlFgxlrwQuery; +import com.mosty.base.model.vo.yjzl.TbZdxlFgdwBddxlrwVO; import com.mosty.base.model.vo.yjzl.TbZdxlFgxlrwVO; +import com.mosty.base.utils.Constant; +import com.mosty.base.utils.MathUtils; import com.mosty.base.utils.PageUtils; import com.mosty.base.utils.QueryWrapperUtils; import com.mosty.common.base.util.StringUtils; import com.mosty.yjzl.mapper.TbZdxlFgxlrwMapper; +import com.mosty.yjzl.service.TbZdxlFgdwBddxlrwService; import com.mosty.yjzl.service.TbZdxlFgdwService; +import com.mosty.yjzl.service.TbZdxlFgmrpzService; import com.mosty.yjzl.service.TbZdxlFgxlrwService; import com.mosty.yjzl.utils.TbZdxlFgxlrwUtils; import lombok.AllArgsConstructor; @@ -24,8 +33,10 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; import java.util.List; +import java.util.stream.Collectors; /** * @author zhangzhao @@ -43,6 +54,16 @@ public class TbZdxlFgxlrwServiceImpl extends ServiceImpl selectRwPage(TbZdxlFgxlrwQuery query) { + IPage page = PageUtils.buildPage(query.getPageSize(), query.getPageCurrent()); + QueryWrapper qw = new QueryWrapper<>(); + + //组装查询参数 + this.buildListSelectQueryWrapper(qw, query); + + //组装本人所在巡组需要打卡或者没有指定巡组的任务 + qw.and(qw1 -> { + TbQwXfbb xfbb = MostyQwzxFeignServiceRemote.getMyXfbbTodayNew(null); + if(ObjectUtils.isNotEmpty(xfbb)){ + qw1.eq(TbZdxlFgxlrw.XFBB_ID_FIELD, xfbb.getId()).or(); + } + //组装其他需要打卡的任务 + qw1.isNull(TbZdxlFgxlrw.XFBB_ID_FIELD); + }); + + //返回Page + IPage resultPage = new Page<>(query.getPageCurrent(), query.getPageSize()); + + //查询数据 + page = this.baseMapper.selectPage(page, qw); + List list = page.getRecords(); + if(CollectionUtils.isEmpty(list)){ + return resultPage; + } + + //转为VO + List resultList = this.buildAllInfoListByEntityList(list); + + //组装VO + resultPage.setRecords(resultList); + resultPage.setTotal(page.getTotal()); + return resultPage; + } + @Override public List selectList(TbZdxlFgxlrwQuery query) { QueryWrapper qw = new QueryWrapper<>(); @@ -99,6 +157,19 @@ public class TbZdxlFgxlrwServiceImpl extends ServiceImpl selectListByIds(String ids) { + if(StringUtils.isBlank(ids)){ + return null; + } + + return this.baseMapper.selectList(new QueryWrapper() + .in(TbZdxlFgxlrw.ID_FIELD, Arrays.asList(ids.split(Constant.SEPARATOR_ENGLISH_COMMA))) + .eq("xt_sjzt", "1") + .eq("xt_scbz", "0") + ); + } + @Override public List selectListByRwRq(Date rwRq) { if (ObjectUtils.isEmpty(rwRq)) { @@ -112,6 +183,7 @@ public class TbZdxlFgxlrwServiceImpl extends ServiceImpl 0){ + //保存必到点信息 + tbZdxlFgdwBddxlrwService.handleList(dto.getBddList()); //返回主键 return entity.getId(); } @@ -157,11 +231,27 @@ public class TbZdxlFgxlrwServiceImpl extends ServiceImpl saveList = new ArrayList<>(), updateList = new ArrayList<>(); for(TbZdxlFgxlrw entity : entityList){ TbZdxlFgxlrw baseEntity = this.selectById(entity.getId()); + if(ObjectUtils.isEmpty(baseEntity)){ + //设置默认值 + entity.setXlghSc(mrpz.getXlSc()); + entity.setXlghXllc(mrpz.getXlLc()); + entity.setXlghPcCl(mrpz.getPcCl()); + entity.setXlghPcRy(mrpz.getPcRy()); //保存 saveList.add(entity); }else{ @@ -191,6 +281,31 @@ public class TbZdxlFgxlrwServiceImpl extends ServiceImpl entityList) { + if(CollectionUtils.isEmpty(entityList)){ + return -1; + } + + List updateList = new ArrayList<>(); + for(TbZdxlFgxlrw entity : entityList){ + TbZdxlFgxlrw updateEntity = new TbZdxlFgxlrw(); + updateEntity.setId(entity.getId()); + updateEntity.setRwZt(TbZdxlFgxlrwUtils.DICT_ITEM_D_ZDXL_FGXLRW_RWZT_YXF); + updateList.add(updateEntity); + } + + boolean success = this.updateBatchById(updateList); + if(success){ + //再保存一次打卡点信息 + tbZdxlFgdwBddxlrwService.handleListByFgxlrwList(entityList); + //返回 + return updateList.size(); + } + return 0; + } + /** * 组装查询参数 * @param qw QueryWrapper @@ -208,6 +323,13 @@ public class TbZdxlFgxlrwServiceImpl extends ServiceImpl bddList; + if(TbZdxlFgxlrwUtils.DICT_ITEM_D_ZDXL_FGXLRW_RWZT_CJ.equals(resultVO.getRwZt()) || TbZdxlFgxlrwUtils.DICT_ITEM_D_ZDXL_FGXLRW_RWZT_YDC.equals(resultVO.getRwZt())){ + //未下发查询实时必到点 + bddList = tbZdxlFgdwBddxlrwService.selectVoListByFgxlrwId(resultVO.getId()); + }else{ + //已下发查询固定必到点 + bddList = tbZdxlFgdwBddxlrwService.selectVoListByYxfFgxlrwId(resultVO.getId()); + } + if(CollectionUtils.isNotEmpty(bddList)){ + int totalGhCs = bddList.stream().mapToInt(TbZdxlFgdwBddxlrwVO::getXlghDkcs).sum(); + int totalSjCs = bddList.stream().mapToInt(TbZdxlFgdwBddxlrwVO::getXlsjDkcs).sum(); + resultVO.setBddAllProgress(MathUtils.percentage(totalSjCs, totalGhCs)); + resultVO.setBddList(bddList); + } + } + + //组装巡防报备信息 + if(StringUtils.isNotBlank(resultVO.getXfbbId())){ + TbQwXfbbVo xfbb = MostyQwzxFeignServiceRemote.getXfbbInfo(resultVO.getXfbbId()); + if(ObjectUtils.isNotEmpty(xfbb)){ + resultVO.setXfbb(xfbb); + } } return resultVO; diff --git a/mosty-yjzl/src/main/java/com/mosty/yjzl/service/TbZdxlFgdwBddService.java b/mosty-yjzl/src/main/java/com/mosty/yjzl/service/TbZdxlFgdwBddService.java new file mode 100644 index 0000000..8b83cc5 --- /dev/null +++ b/mosty-yjzl/src/main/java/com/mosty/yjzl/service/TbZdxlFgdwBddService.java @@ -0,0 +1,84 @@ +package com.mosty.yjzl.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.mosty.base.model.dto.yjzl.TbZdxlFgdwBddSaveDTO; +import com.mosty.base.model.dto.yjzl.TbZdxlFgdwBddUpdateDTO; +import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgdwBdd; +import com.mosty.base.model.query.yjzl.TbZdxlFgdwBddQuery; +import com.mosty.base.model.vo.yjzl.TbZdxlFgdwBddVO; + +import java.util.List; + +/** + * @author zhangzhao + * @description 指导巡逻方格点位必到点表Service + * @modifier zhangzhao + * @modifiedTime 2025/09/06 12:01 + * @since 2025/09/06 12:01 + */ +public interface TbZdxlFgdwBddService { + + /** + * 查询单条(根据主键ID) + * @param id 主键ID + * @return 实体信息 + */ + TbZdxlFgdwBdd selectById(String id); + + /** + * 查询分页 + * @param query 实体查询对象 + * @return 实体信息分页列表 + */ + IPage selectPage(TbZdxlFgdwBddQuery query); + + /** + * 查询列表 + * @param query 实体查询对象 + * @return 实体信息列表 + */ + List selectList(TbZdxlFgdwBddQuery query); + + /** + * 查询列表(根据ID列表) + * @param idList ID列表 + * @return 实体信息列表 + */ + List selectListByIdList(List idList); + + /** + * 查询列表(根据方格点位ID) + * @param fgdwId 方格点位ID + * @return 实体信息列表 + */ + List selectListByFgdwId(Long fgdwId); + + /** + * 查询列表(根据方格巡逻任务ID) + * @param fgxlrwId 方格巡逻任务ID + * @return 实体信息列表 + */ + List selectListByFgxlrwId(String fgxlrwId); + + /** + * 保存单条 + * @param dto 保存DTO对象 + * @return 实体主键ID + */ + String saveEntity(TbZdxlFgdwBddSaveDTO dto); + + /** + * 修改单条 + * @param dto 修改DTO对象 + * @return 实体主键ID + */ + String updateEntity(TbZdxlFgdwBddUpdateDTO dto); + + /** + * 注销单条 + * @param entity 实体信息 + * @return 注销条数 + */ + int cancelEntity(TbZdxlFgdwBdd entity); + +} diff --git a/mosty-yjzl/src/main/java/com/mosty/yjzl/service/TbZdxlFgdwBddxlrwJlService.java b/mosty-yjzl/src/main/java/com/mosty/yjzl/service/TbZdxlFgdwBddxlrwJlService.java new file mode 100644 index 0000000..120a8a8 --- /dev/null +++ b/mosty-yjzl/src/main/java/com/mosty/yjzl/service/TbZdxlFgdwBddxlrwJlService.java @@ -0,0 +1,58 @@ +package com.mosty.yjzl.service; + +import com.mosty.base.model.dto.yjzl.TbZdxlFgdwBddxlrwJlClockInDTO; +import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgdwBddxlrwJl; +import com.mosty.common.token.UserInfo; + +import java.util.Date; +import java.util.List; + +/** + * @author zhangzhao + * @description 指导巡逻方格点位必到点巡逻任务记录表Service + * @modifier zhangzhao + * @modifiedTime 2025/09/07 19:56 + * @since 2025/09/07 19:56 + */ +public interface TbZdxlFgdwBddxlrwJlService { + + /** + * 查询单条(根据主键ID) + * @param id 主键ID + * @return 实体信息 + */ + TbZdxlFgdwBddxlrwJl selectById(String id); + + /** + * 查询单条(根据必到点巡逻任务ID和顺序) + * @param bddxlrwId 必到点巡逻任务ID + * @param dkSx 顺序 + * @return 实体信息 + */ + TbZdxlFgdwBddxlrwJl selectByBddxlrwIdAndDkSx(String bddxlrwId, int dkSx); + + /** + * 查询列表(根据必到点巡逻任务ID) + * @param bddxlrwId 必到点巡逻任务ID + * @return 实体列表 + */ + List selectListByBddxlrwId(String bddxlrwId); + + /** + * 创建列表(根据方格巡逻任务ID) + * @param fgxlrwId 方格巡逻任务ID + * @return 操作条数 + */ + int createListByFgxlrwId(String fgxlrwId); + + /** + * 打卡 + * @param baseEntity 实体信息 + * @param dto 打卡DTO对象 + * @param user 当前登录人员信息 + * @param dksj 打卡时间 + * @return 主键ID + */ + String clockIn(TbZdxlFgdwBddxlrwJl baseEntity, TbZdxlFgdwBddxlrwJlClockInDTO dto, UserInfo user, Date dksj); + +} diff --git a/mosty-yjzl/src/main/java/com/mosty/yjzl/service/TbZdxlFgdwBddxlrwService.java b/mosty-yjzl/src/main/java/com/mosty/yjzl/service/TbZdxlFgdwBddxlrwService.java new file mode 100644 index 0000000..7c85667 --- /dev/null +++ b/mosty-yjzl/src/main/java/com/mosty/yjzl/service/TbZdxlFgdwBddxlrwService.java @@ -0,0 +1,70 @@ +package com.mosty.yjzl.service; + +import com.mosty.base.model.dto.yjzl.TbZdxlFgdwBddxlrwHandleDTO; +import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgdwBddxlrw; +import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgdwBddxlrwJl; +import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgxlrw; +import com.mosty.base.model.vo.yjzl.TbZdxlFgdwBddxlrwVO; + +import java.util.List; + +/** + * @author zhangzhao + * @description 指导巡逻方格点位必到点巡逻任务表Service + * @modifier zhangzhao + * @modifiedTime 2025/09/06 19:43 + * @since 2025/09/06 19:43 + */ +public interface TbZdxlFgdwBddxlrwService { + + /** + * 查询单条(根据主键ID) + * @param id 主键ID + * @return 实体信息 + */ + TbZdxlFgdwBddxlrw selectById(String id); + + /** + * 查询列表(根据方格巡逻任务ID) + * @param fgxlrwId 方格巡逻任务ID + * @return 实体信息列表 + */ + List selectListByFgxlrwId(String fgxlrwId); + + /** + * 查询返回信息列表(根据方格巡逻任务ID) + * @param fgxlrwId 方格巡逻任务ID + * @return 返回信息列表 + */ + List selectVoListByYxfFgxlrwId(String fgxlrwId); + + /** + * 查询返回信息列表(根据方格巡逻任务ID) + * @param fgxlrwId 方格巡逻任务ID + * @return 返回信息列表 + */ + List selectVoListByFgxlrwId(String fgxlrwId); + + /** + * 保存列表 + * @param handleList 操作列表 + * @return 操作条数 + */ + int handleList(List handleList); + + /** + * 保存列表(根据方格巡逻任务列表) + * @param fgxlrwList 方格巡逻任务列表 + * @return 操作条数 + */ + int handleListByFgxlrwList(List fgxlrwList); + + /** + * 打卡(根据打卡记录) + * @param jl 打卡记录 + * @param start 是否是开始打卡 + * @return 主键ID + */ + String clockInByJl(TbZdxlFgdwBddxlrwJl jl, boolean start); + +} diff --git a/mosty-yjzl/src/main/java/com/mosty/yjzl/service/TbZdxlFgdwService.java b/mosty-yjzl/src/main/java/com/mosty/yjzl/service/TbZdxlFgdwService.java index 3063167..f1a93f2 100644 --- a/mosty-yjzl/src/main/java/com/mosty/yjzl/service/TbZdxlFgdwService.java +++ b/mosty-yjzl/src/main/java/com/mosty/yjzl/service/TbZdxlFgdwService.java @@ -1,7 +1,8 @@ package com.mosty.yjzl.service; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.mosty.base.model.dto.yjzl.TbZdxlFgdwUpdateDTO; -import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgdw; +import com.mosty.base.model.query.yjzl.TbZdxlFgdwQuery; import com.mosty.base.model.vo.yjzl.TbZdxlFgdwVO; import java.util.List; @@ -20,7 +21,7 @@ public interface TbZdxlFgdwService { * @param id 主键ID * @return 实体信息 */ - TbZdxlFgdwVO selectById(Integer id); + TbZdxlFgdwVO selectById(Long id); /** * 查询全量列表 @@ -29,17 +30,24 @@ public interface TbZdxlFgdwService { List selectAllList(); /** - * 保存列表(根据生成数据) - * @param saveList 生成数据列表 - * @return 保存数量 + * 查询分页 + * @param query 实体查询对象 + * @return 实体信息分页列表 */ - int saveListByGenerate(List saveList, String firstMc); + IPage selectPage(TbZdxlFgdwQuery query); + + /** + * 查询列表 + * @param query 实体查询对象 + * @return 实体信息列表 + */ + List selectList(TbZdxlFgdwQuery query); /** * 修改单条 * @param dto 修改DTO对象 * @return 实体主键ID */ - Integer updateEntity(TbZdxlFgdwUpdateDTO dto); + Long updateEntity(TbZdxlFgdwUpdateDTO dto); } diff --git a/mosty-yjzl/src/main/java/com/mosty/yjzl/service/TbZdxlFgmrpzService.java b/mosty-yjzl/src/main/java/com/mosty/yjzl/service/TbZdxlFgmrpzService.java new file mode 100644 index 0000000..b167ad4 --- /dev/null +++ b/mosty-yjzl/src/main/java/com/mosty/yjzl/service/TbZdxlFgmrpzService.java @@ -0,0 +1,29 @@ +package com.mosty.yjzl.service; + +import com.mosty.base.model.dto.yjzl.TbZdxlFgdwUpdateDTO; +import com.mosty.base.model.dto.yjzl.TbZdxlFgmrpzUpdateDTO; +import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgmrpz; + +/** + * @author zhangzhao + * @description 指导巡逻方格默认配置表Service + * @modifier zhangzhao + * @modifiedTime 2025/09/05 19:00 + * @since 2025/09/05 19:00 + */ +public interface TbZdxlFgmrpzService { + + /** + * 查询单条(默认数据) + * @return 实体信息 + */ + TbZdxlFgmrpz selectDefault(); + + /** + * 修改单条 + * @param dto 修改DTO对象 + * @return 实体主键ID + */ + String updateEntity(TbZdxlFgmrpzUpdateDTO dto); + +} diff --git a/mosty-yjzl/src/main/java/com/mosty/yjzl/service/TbZdxlFgxlrwService.java b/mosty-yjzl/src/main/java/com/mosty/yjzl/service/TbZdxlFgxlrwService.java index c09c54d..9ee2cb3 100644 --- a/mosty-yjzl/src/main/java/com/mosty/yjzl/service/TbZdxlFgxlrwService.java +++ b/mosty-yjzl/src/main/java/com/mosty/yjzl/service/TbZdxlFgxlrwService.java @@ -32,6 +32,13 @@ public interface TbZdxlFgxlrwService { */ IPage selectPage(TbZdxlFgxlrwQuery query); + /** + * 查询分页(需要执行的任务) + * @param query 实体查询对象 + * @return 实体返回信息分页列表 + */ + IPage selectRwPage(TbZdxlFgxlrwQuery query); + /** * 查询列表 * @param query 实体查询对象 @@ -39,6 +46,13 @@ public interface TbZdxlFgxlrwService { */ List selectList(TbZdxlFgxlrwQuery query); + /** + * 查询列表(根据主键ID字符串) + * @param ids 主键ID字符串 + * @return 实体返回信息列表 + */ + List selectListByIds(String ids); + /** * 查询列表(根据任务日期) * @param rwRq 任务日期 @@ -67,4 +81,11 @@ public interface TbZdxlFgxlrwService { */ int importListByMb(List entityList); + /** + * 下发列表 + * @param entityList 需下发的列表 + * @return 操作条数 + */ + int issueList(List entityList); + } diff --git a/mosty-yjzl/src/main/java/com/mosty/yjzl/utils/TbZdxlFgxlrwUtils.java b/mosty-yjzl/src/main/java/com/mosty/yjzl/utils/TbZdxlFgxlrwUtils.java index 9744226..8a71be3 100644 --- a/mosty-yjzl/src/main/java/com/mosty/yjzl/utils/TbZdxlFgxlrwUtils.java +++ b/mosty-yjzl/src/main/java/com/mosty/yjzl/utils/TbZdxlFgxlrwUtils.java @@ -109,6 +109,11 @@ public class TbZdxlFgxlrwUtils { */ public final static String DICT_ITEM_D_ZDXL_FGXLRW_RWZT_YDC = "02"; + /** + * 字典项-指导巡逻方格巡逻任务状态-已下发 + */ + public final static String DICT_ITEM_D_ZDXL_FGXLRW_RWZT_YXF = "03"; + /** * 系统配置配置键-方格巡逻任务警情配置-报警细类 */ diff --git a/mosty-yjzl/src/main/resources/application.yml b/mosty-yjzl/src/main/resources/application.yml index 22736a8..45fb091 100644 --- a/mosty-yjzl/src/main/resources/application.yml +++ b/mosty-yjzl/src/main/resources/application.yml @@ -42,6 +42,9 @@ spring: jedis: pool: max-active: 50 + messages: + basename: i18n/messages + encoding: utf-8 swagger: host: 80.155.0.84