7 files modified
1 files added
| | |
| | | PropsUtil.setProperty(props, "spring.cloud.nacos.password", LauncherConstant.NACOS_PASSWORD); |
| | | PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.server-addr", LauncherConstant.nacosAddr(profile)); |
| | | PropsUtil.setProperty(props, "spring.cloud.nacos.config.server-addr", LauncherConstant.nacosAddr(profile)); |
| | | // 指定命名空间 |
| | | PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.namespace", "ja-dev"); |
| | | PropsUtil.setProperty(props, "spring.cloud.nacos.config.namespace", "ja-dev"); |
| | | PropsUtil.setProperty(props, "spring.cloud.sentinel.transport.dashboard", LauncherConstant.sentinelAddr(profile)); |
| | | PropsUtil.setProperty(props, "spring.zipkin.base-url", LauncherConstant.zipkinAddr(profile)); |
| | | PropsUtil.setProperty(props, "spring.datasource.dynamic.enabled", "false"); |
| | |
| | | package org.sxkj.common.utils; |
| | | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | |
| | | import org.geotools.geometry.jts.JTSFactoryFinder; |
| | | import org.locationtech.jts.geom.Geometry; |
| | | import org.locationtech.jts.geom.GeometryFactory; |
| | | import org.locationtech.jts.io.ParseException; |
| | | import org.locationtech.jts.io.WKTReader; |
| | | |
| | | public class GeomUtils { |
| | | |
| | | private static final GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(); |
| | | private static final WKTReader wktReader = new WKTReader(geometryFactory); |
| | | |
| | | public static boolean isGeomInvalid(String geom) { |
| | | if (StringUtils.isBlank(geom)) { |
| | |
| | | String upper = geom.trim().toUpperCase(); |
| | | return !upper.contains("POLYGON"); |
| | | } |
| | | |
| | | /** |
| | | * 验证并转换几何数据,确保其有效 |
| | | * @param geom WKT格式的几何数据 |
| | | * @return 有效的几何数据,或null如果转换失败 |
| | | */ |
| | | public static String validateAndFormatGeom(String geom) { |
| | | if (StringUtils.isBlank(geom)) { |
| | | return null; |
| | | } |
| | | |
| | | try { |
| | | // 解析WKT字符串 |
| | | Geometry geometry = wktReader.read(geom); |
| | | |
| | | // 如果几何数据无效,尝试修复 |
| | | if (!geometry.isValid()) { |
| | | geometry = geometry.buffer(0); |
| | | } |
| | | |
| | | // 确保几何数据有效 |
| | | if (geometry.isValid()) { |
| | | return geometry.toText(); |
| | | } else { |
| | | return null; |
| | | } |
| | | } catch (ParseException e) { |
| | | // 解析失败 |
| | | return null; |
| | | } |
| | | } |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import org.sxkj.gd.workorder.entity.GdWorkOrderEntity; |
| | | import org.sxkj.gd.workorder.param.WorkOrderParam; |
| | | import org.sxkj.gd.workorder.vo.GdWorkOrderVO; |
| | | import org.sxkj.gd.workorder.excel.GdWorkOrderExcel; |
| | | import org.sxkj.gd.workorder.wrapper.GdWorkOrderWrapper; |
| | |
| | | GdWorkOrderEntity detail = gdWorkOrderService.getOne(Condition.getQueryWrapper(gdWorkOrder)); |
| | | return R.data(GdWorkOrderWrapper.build().entityVO(detail)); |
| | | } |
| | | /** |
| | | * 工单任务表 分页 |
| | | */ |
| | | @GetMapping("/list") |
| | | @ApiOperationSupport(order = 2) |
| | | @ApiOperation(value = "分页", notes = "传入gdWorkOrder") |
| | | public R<IPage<GdWorkOrderVO>> list(@ApiIgnore @RequestParam Map<String, Object> gdWorkOrder, Query query) { |
| | | IPage<GdWorkOrderEntity> pages = gdWorkOrderService.page(Condition.getPage(query), Condition.getQueryWrapper(gdWorkOrder, GdWorkOrderEntity.class)); |
| | | return R.data(GdWorkOrderWrapper.build().pageVO(pages)); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 工单任务表 自定义分页 |
| | |
| | | /** |
| | | * 工单任务表 新增 |
| | | */ |
| | | @PostMapping("/save") |
| | | @PostMapping("/submit") |
| | | @ApiOperationSupport(order = 4) |
| | | @ApiOperation(value = "新增", notes = "传入gdWorkOrder") |
| | | public R save(@Valid @RequestBody GdWorkOrderEntity gdWorkOrder) { |
| | | return R.status(gdWorkOrderService.save(gdWorkOrder)); |
| | | } |
| | | |
| | | /** |
| | | * 工单任务表 修改 |
| | | */ |
| | | @PostMapping("/update") |
| | | @ApiOperationSupport(order = 5) |
| | | @ApiOperation(value = "修改", notes = "传入gdWorkOrder") |
| | | public R update(@Valid @RequestBody GdWorkOrderEntity gdWorkOrder) { |
| | | return R.status(gdWorkOrderService.updateById(gdWorkOrder)); |
| | | } |
| | | |
| | | /** |
| | | * 工单任务表 新增或修改 |
| | | */ |
| | | @PostMapping("/submit") |
| | | @ApiOperationSupport(order = 6) |
| | | @ApiOperation(value = "新增或修改", notes = "传入gdWorkOrder") |
| | | public R submit(@Valid @RequestBody GdWorkOrderEntity gdWorkOrder) { |
| | | return R.status(gdWorkOrderService.saveOrUpdate(gdWorkOrder)); |
| | | public R save(@Valid @RequestBody WorkOrderParam workOrderParam) { |
| | | return R.status(gdWorkOrderService.saveOrUpdateWorkOrder(workOrderParam)); |
| | | } |
| | | |
| | | /** |
| | |
| | | * 工单状态:0草稿、10发布中_接单中、11发布中_拒绝接单、20响应中_待拆分、21响应中_申请取消、22响应中_申请修改、23响应中_已取消、30执行中_待全部完成、31执行中_协商修改、40完成待验_待全部验收、50验收通过_待结算、60结算完成_已结算 |
| | | */ |
| | | @ApiModelProperty(value = "工单状态:0草稿、10发布中_接单中、11发布中_拒绝接单、20响应中_待拆分、21响应中_申请取消、22响应中_申请修改、23响应中_已取消、30执行中_待全部完成、31执行中_协商修改、40完成待验_待全部验收、50验收通过_待结算、60结算完成_已结算") |
| | | private Byte workOrderStatus; |
| | | private Byte workOrderStatus = 0; |
| | | /** |
| | | * 执行时间范围-开始 |
| | | */ |
| | |
| | | * 经纬度面(存储地理面数据) |
| | | */ |
| | | @ApiModelProperty(value = "经纬度面(存储地理面数据)") |
| | | private byte[] geom; |
| | | private String geom; |
| | | /** |
| | | * 备注 |
| | | */ |
| | |
| | | SELECT * FROM ja_gd_work_order ${ew.customSqlSegment} |
| | | </select> |
| | | |
| | | <!-- 自定义插入语句,使用ST_GeomFromText处理几何数据 --> |
| | | <insert id="insert" parameterType="org.sxkj.gd.workorder.entity.GdWorkOrderEntity"> |
| | | INSERT INTO ja_gd_work_order ( |
| | | id, work_order_name, work_order_code, work_order_type, |
| | | device_load_demand, recommend_device_ids, work_order_status, |
| | | execute_start_time, execute_end_time, service_party, |
| | | geom, remark, area_code, |
| | | create_user, create_dept, create_time, |
| | | update_user, update_time, status, is_deleted |
| | | ) VALUES ( |
| | | #{id}, #{workOrderName}, #{workOrderCode}, #{workOrderType}, |
| | | #{deviceLoadDemand}, #{recommendDeviceIds}, #{workOrderStatus}, |
| | | #{executeStartTime}, #{executeEndTime}, #{serviceParty}, |
| | | ST_GeomFromText(#{geom}), #{remark}, #{areaCode}, |
| | | #{createUser}, #{createDept}, #{createTime}, |
| | | #{updateUser}, #{updateTime}, #{status}, #{isDeleted} |
| | | ) |
| | | </insert> |
| | | |
| | | <!-- 自定义更新语句,使用ST_GeomFromText处理几何数据 --> |
| | | <update id="updateById" parameterType="org.sxkj.gd.workorder.entity.GdWorkOrderEntity"> |
| | | UPDATE ja_gd_work_order SET |
| | | work_order_name = #{workOrderName}, |
| | | work_order_code = #{workOrderCode}, |
| | | work_order_type = #{workOrderType}, |
| | | device_load_demand = #{deviceLoadDemand}, |
| | | recommend_device_ids = #{recommendDeviceIds}, |
| | | work_order_status = #{workOrderStatus}, |
| | | execute_start_time = #{executeStartTime}, |
| | | execute_end_time = #{executeEndTime}, |
| | | service_party = #{serviceParty}, |
| | | geom = ST_GeomFromText(#{geom}), |
| | | remark = #{remark}, |
| | | area_code = #{areaCode}, |
| | | update_user = #{updateUser}, |
| | | update_time = #{updateTime}, |
| | | status = #{status}, |
| | | is_deleted = #{isDeleted} |
| | | WHERE id = #{id} |
| | | </update> |
| | | |
| | | </mapper> |
| New file |
| | |
| | | package org.sxkj.gd.workorder.param; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import javax.validation.constraints.NotNull; |
| | | import java.util.Date; |
| | | |
| | | @Data |
| | | public class WorkOrderParam { |
| | | |
| | | @ApiModelProperty(value = "id") |
| | | private Long id; |
| | | |
| | | /** |
| | | * 工单名称 |
| | | */ |
| | | @ApiModelProperty(value = "工单名称") |
| | | @NotNull |
| | | private String workOrderName; |
| | | |
| | | /** |
| | | * 工单类型(巡查类/安检类等) |
| | | */ |
| | | @ApiModelProperty(value = "工单类型(1.巡查类/2.安检类等)") |
| | | @NotNull |
| | | private String workOrderType; |
| | | /** |
| | | * 设备负载需求(红外、喊话器、探照灯) |
| | | */ |
| | | @ApiModelProperty(value = "设备负载需求(1.红外、2.喊话器、3.探照灯)") |
| | | @NotNull |
| | | private String deviceLoadDemand; |
| | | |
| | | @ApiModelProperty(value = "工单状态:0草稿、10发布中_接单中、11发布中_拒绝接单、20响应中_待拆分、21响应中_申请取消、22响应中_申请修改、23响应中_已取消、30执行中_待全部完成、31执行中_协商修改、40完成待验_待全部验收、50验收通过_待结算、60结算完成_已结算") |
| | | @NotNull |
| | | private String workOrderStatus; |
| | | /** |
| | | * 推荐设备ID(逗号分隔) |
| | | */ |
| | | @ApiModelProperty(value = "推荐设备ID(逗号分隔)") |
| | | private String recommendDeviceIds; |
| | | |
| | | /** |
| | | * 执行时间范围-开始 |
| | | */ |
| | | @ApiModelProperty(value = "执行时间范围-开始") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | @NotNull |
| | | private Date executeStartTime; |
| | | /** |
| | | * 执行时间范围-结束 |
| | | */ |
| | | @ApiModelProperty(value = "执行时间范围-结束") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | @NotNull |
| | | private Date executeEndTime; |
| | | /** |
| | | * 经纬度面(存储地理面数据) |
| | | */ |
| | | @ApiModelProperty(value = "经纬度面(存储地理面数据)") |
| | | @NotNull |
| | | private String geom; |
| | | /** |
| | | * 备注 |
| | | */ |
| | | @ApiModelProperty(value = "备注") |
| | | private String remark; |
| | | |
| | | } |
| | |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.Wrapper; |
| | | import org.sxkj.gd.workorder.entity.GdWorkOrderEntity; |
| | | import org.sxkj.gd.workorder.param.WorkOrderParam; |
| | | import org.sxkj.gd.workorder.vo.GdWorkOrderVO; |
| | | import org.sxkj.gd.workorder.excel.GdWorkOrderExcel; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import org.springblade.core.mp.base.BaseService; |
| | | |
| | | import javax.validation.Valid; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | */ |
| | | List<GdWorkOrderExcel> exportGdWorkOrder(Wrapper<GdWorkOrderEntity> queryWrapper); |
| | | |
| | | /** |
| | | * 保存或更新工单任务表 |
| | | * @param workOrderParam |
| | | * @return |
| | | */ |
| | | boolean saveOrUpdateWorkOrder(@Valid WorkOrderParam workOrderParam); |
| | | } |
| | |
| | | */ |
| | | package org.sxkj.gd.workorder.service.impl; |
| | | |
| | | import org.sxkj.gd.workorder.entity.GdWorkOrderEntity; |
| | | import org.sxkj.gd.workorder.vo.GdWorkOrderVO; |
| | | import org.sxkj.gd.workorder.excel.GdWorkOrderExcel; |
| | | import org.sxkj.gd.workorder.mapper.GdWorkOrderMapper; |
| | | import org.sxkj.gd.workorder.service.IGdWorkOrderService; |
| | | import org.springframework.stereotype.Service; |
| | | import com.baomidou.mybatisplus.core.conditions.Wrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springblade.core.mp.base.BaseServiceImpl; |
| | | import org.springblade.core.secure.utils.AuthUtil; |
| | | import org.springblade.core.tool.utils.BeanUtil; |
| | | import org.springframework.stereotype.Service; |
| | | import org.sxkj.common.utils.GeomUtils; |
| | | import org.sxkj.common.utils.OrderNumUtils; |
| | | import org.sxkj.gd.workorder.entity.GdWorkOrderEntity; |
| | | import org.sxkj.gd.workorder.excel.GdWorkOrderExcel; |
| | | import org.sxkj.gd.workorder.mapper.GdWorkOrderMapper; |
| | | import org.sxkj.gd.workorder.param.WorkOrderParam; |
| | | import org.sxkj.gd.workorder.service.IGdWorkOrderService; |
| | | import org.sxkj.gd.workorder.vo.GdWorkOrderVO; |
| | | |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | |
| | | /** |
| | | * 工单任务表 服务实现类 |
| | |
| | | return gdWorkOrderList; |
| | | } |
| | | |
| | | /** |
| | | * 保存或更新工单任务表 |
| | | * @param workOrderParam |
| | | * @return |
| | | */ |
| | | @Override |
| | | public boolean saveOrUpdateWorkOrder(WorkOrderParam workOrderParam) { |
| | | GdWorkOrderEntity entity = Objects.requireNonNull(BeanUtil.copy(workOrderParam, GdWorkOrderEntity.class)); |
| | | |
| | | // 验证并格式化几何数据 |
| | | String geom = entity.getGeom(); |
| | | String validatedGeom = GeomUtils.validateAndFormatGeom(geom); |
| | | if (validatedGeom == null) { |
| | | return false; |
| | | } |
| | | |
| | | // 设置验证后的几何数据 |
| | | entity.setGeom(validatedGeom); |
| | | |
| | | // 生成工单编号 |
| | | if (StringUtils.isBlank(entity.getWorkOrderCode())) { |
| | | // 使用时间戳生成唯一工单编号 |
| | | String timestamp = OrderNumUtils.initOrderNum("gdTicketInfo"); |
| | | entity.setWorkOrderCode("GD" + timestamp); |
| | | } |
| | | entity.setCreateUser(AuthUtil.getUserId()); |
| | | entity.setCreateDept(Long.valueOf(AuthUtil.getDeptId())); |
| | | return saveOrUpdate(entity); |
| | | } |
| | | } |