From 34eb3de4c0ec9978194c4386cc8bc72938468867 Mon Sep 17 00:00:00 2001 From: han0 Date: Tue, 10 Sep 2024 11:06:25 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E6=96=99=E5=9C=BA?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/controller/BudgetController.java | 1 - .../controller/LocationController.java | 151 ++++++++++++++++++ .../modular/location/entity/Location.java | 72 +++++++++ .../modular/location/enums/LocationEnum.java | 23 +++ .../location/mapper/LocationMapper.java | 14 ++ .../mapper/mapping/LocationMapper.xml | 5 + .../location/param/LocationAddParam.java | 32 ++++ .../location/param/LocationEditParam.java | 34 ++++ .../location/param/LocationIdParam.java | 24 +++ .../location/param/LocationKnownParam.java | 22 +++ .../location/param/LocationPageParam.java | 38 +++++ .../location/service/LocationService.java | 93 +++++++++++ src/main/resources/_sql/init/mysql/v0.1.sql | 17 +- src/main/resources/_sql/init/mysql/v0.3.sql | 14 ++ 14 files changed, 538 insertions(+), 2 deletions(-) create mode 100644 src/main/java/mjkf/xinke/main/modular/location/controller/LocationController.java create mode 100644 src/main/java/mjkf/xinke/main/modular/location/entity/Location.java create mode 100644 src/main/java/mjkf/xinke/main/modular/location/enums/LocationEnum.java create mode 100644 src/main/java/mjkf/xinke/main/modular/location/mapper/LocationMapper.java create mode 100644 src/main/java/mjkf/xinke/main/modular/location/mapper/mapping/LocationMapper.xml create mode 100644 src/main/java/mjkf/xinke/main/modular/location/param/LocationAddParam.java create mode 100644 src/main/java/mjkf/xinke/main/modular/location/param/LocationEditParam.java create mode 100644 src/main/java/mjkf/xinke/main/modular/location/param/LocationIdParam.java create mode 100644 src/main/java/mjkf/xinke/main/modular/location/param/LocationKnownParam.java create mode 100644 src/main/java/mjkf/xinke/main/modular/location/param/LocationPageParam.java create mode 100644 src/main/java/mjkf/xinke/main/modular/location/service/LocationService.java create mode 100644 src/main/resources/_sql/init/mysql/v0.3.sql diff --git a/src/main/java/mjkf/xinke/main/controller/BudgetController.java b/src/main/java/mjkf/xinke/main/controller/BudgetController.java index bf0e63e..8672fc5 100644 --- a/src/main/java/mjkf/xinke/main/controller/BudgetController.java +++ b/src/main/java/mjkf/xinke/main/controller/BudgetController.java @@ -157,7 +157,6 @@ public class BudgetController { // todo-1 发布编码替换 // todo-1 公众网站数据 // todo-1 公众网站历史数据 - // todo-1 料场位置管理 // todo-1 地图里程数据 // todo-1 价格权重调整 // todo-1 外省数据上传 diff --git a/src/main/java/mjkf/xinke/main/modular/location/controller/LocationController.java b/src/main/java/mjkf/xinke/main/modular/location/controller/LocationController.java new file mode 100644 index 0000000..bac2337 --- /dev/null +++ b/src/main/java/mjkf/xinke/main/modular/location/controller/LocationController.java @@ -0,0 +1,151 @@ + +package mjkf.xinke.main.modular.location.controller; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import mjkf.xinke.common.exception.CommonException; +import mjkf.xinke.main.model.db.LocalMaterial; +import mjkf.xinke.main.modular.location.param.*; +import mjkf.xinke.main.service.LocalMaterialService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; +import mjkf.xinke.common.annotation.CommonLog; +import mjkf.xinke.common.pojo.CommonResult; +import mjkf.xinke.common.pojo.CommonValidList; +import mjkf.xinke.main.modular.location.entity.Location; +import mjkf.xinke.main.modular.location.service.LocationService; + +import javax.annotation.Resource; +import javax.validation.Valid; +import javax.validation.constraints.NotEmpty; +import java.util.List; + +/** + * 料场位置控制器 + * + * @author han0 + * @date 2024/09/10 10:36 + */ +@Api(tags = "料场位置控制器") +@ApiSupport(author = "SNOWY_TEAM", order = 1) +@RestController +@Validated +public class LocationController { + + @Resource + private LocationService locationService; + + @Resource + private LocalMaterialService localMaterialService; + + /** + * 获取已知料场位置列表 + * + * @author han0 + * @date 2024/09/10 10:36 + */ + @ApiOperationSupport(order = 1) + @ApiOperation("获取已知料场位置列表") + //@SaCheckPermission("/location/location/page") + @GetMapping("/location/location/known") + public CommonResult> knownList(LocationKnownParam param) { + var query = new QueryWrapper(); + if (ObjectUtil.isNotEmpty(param.getName())) { + query.lambda().like(LocalMaterial::getPosition, param.getName()); + } + query.select("DISTINCT position"); + var result = localMaterialService.list(query); + + return CommonResult.data(result); + } + + /** + * 获取料场位置分页 + * + * @author han0 + * @date 2024/09/10 10:36 + */ + @ApiOperationSupport(order = 1) + @ApiOperation("获取料场位置分页") + //@SaCheckPermission("/location/location/page") + @GetMapping("/location/location/page") + public CommonResult> page(LocationPageParam locationPageParam) { + return CommonResult.data(locationService.page(locationPageParam)); + } + + /** + * 添加料场位置 + * + * @author han0 + * @date 2024/09/10 10:36 + */ + @ApiOperationSupport(order = 2) + @ApiOperation("添加料场位置") + @CommonLog("添加料场位置") + //@SaCheckPermission("/location/location/add") + @PostMapping("/location/location/add") + public CommonResult add(@RequestBody @Valid LocationAddParam locationAddParam) { + var item = locationService.getByName(locationAddParam.getName()); + if (ObjectUtil.isNotEmpty(item)) { + throw new CommonException("已存在同名位置"); + } + locationService.add(locationAddParam); + return CommonResult.ok(); + } + + /** + * 编辑料场位置 + * + * @author han0 + * @date 2024/09/10 10:36 + */ + @ApiOperationSupport(order = 3) + @ApiOperation("编辑料场位置") + @CommonLog("编辑料场位置") + //@SaCheckPermission("/location/location/edit") + @PostMapping("/location/location/edit") + public CommonResult edit(@RequestBody @Valid LocationEditParam locationEditParam) { + locationService.edit(locationEditParam); + return CommonResult.ok(); + } + + /** + * 删除料场位置 + * + * @author han0 + * @date 2024/09/10 10:36 + */ + @ApiOperationSupport(order = 4) + @ApiOperation("删除料场位置") + @CommonLog("删除料场位置") + //@SaCheckPermission("/location/location/delete") + @PostMapping("/location/location/delete") + public CommonResult delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空") + CommonValidList locationIdParamList) { + locationService.delete(locationIdParamList); + return CommonResult.ok(); + } + + /** + * 获取料场位置详情 + * + * @author han0 + * @date 2024/09/10 10:36 + */ + @ApiOperationSupport(order = 5) + @ApiOperation("获取料场位置详情") + //@SaCheckPermission("/location/location/detail") + @GetMapping("/location/location/detail") + public CommonResult detail(@Valid LocationIdParam locationIdParam) { + return CommonResult.data(locationService.detail(locationIdParam)); + } + +} diff --git a/src/main/java/mjkf/xinke/main/modular/location/entity/Location.java b/src/main/java/mjkf/xinke/main/modular/location/entity/Location.java new file mode 100644 index 0000000..926fb6b --- /dev/null +++ b/src/main/java/mjkf/xinke/main/modular/location/entity/Location.java @@ -0,0 +1,72 @@ + +package mjkf.xinke.main.modular.location.entity; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 料场位置实体 + * + * @author han0 + * @date 2024/09/10 10:36 + **/ +@Getter +@Setter +@TableName("LOCATION") +public class Location { + + /** id */ + @TableId + @ApiModelProperty(value = "id", position = 1) + private String id; + + /** 名称 */ + @ApiModelProperty(value = "名称", position = 2) + private String name; + + /** 经度 */ + @ApiModelProperty(value = "经度", position = 3) + private BigDecimal lon; + + /** 纬度 */ + @ApiModelProperty(value = "纬度", position = 4) + private BigDecimal lat; + + /** 扩展信息 */ + @ApiModelProperty(value = "扩展信息", position = 5) + private String extJson; + + /** 租户id */ + @ApiModelProperty(value = "租户id", position = 6) + private String tenantId; + + /** 删除标志 */ + @ApiModelProperty(value = "删除标志", position = 7) + @TableLogic + @TableField(fill = FieldFill.INSERT) + private String deleteFlag; + + /** 创建时间 */ + @ApiModelProperty(value = "创建时间", position = 8) + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** 创建用户 */ + @ApiModelProperty(value = "创建用户", position = 9) + @TableField(fill = FieldFill.INSERT) + private String createUser; + + /** 更新时间 */ + @ApiModelProperty(value = "更新时间", position = 10) + @TableField(fill = FieldFill.UPDATE) + private Date updateTime; + + /** 更新人 */ + @ApiModelProperty(value = "更新人", position = 11) + @TableField(fill = FieldFill.UPDATE) + private String updateUser; +} diff --git a/src/main/java/mjkf/xinke/main/modular/location/enums/LocationEnum.java b/src/main/java/mjkf/xinke/main/modular/location/enums/LocationEnum.java new file mode 100644 index 0000000..708de4e --- /dev/null +++ b/src/main/java/mjkf/xinke/main/modular/location/enums/LocationEnum.java @@ -0,0 +1,23 @@ + +package mjkf.xinke.main.modular.location.enums; + +import lombok.Getter; + +/** + * 料场位置枚举 + * + * @author han0 + * @date 2024/09/10 10:36 + **/ +@Getter +public enum LocationEnum { + + /** 测试 */ + TEST("TEST"); + + private final String value; + + LocationEnum(String value) { + this.value = value; + } +} diff --git a/src/main/java/mjkf/xinke/main/modular/location/mapper/LocationMapper.java b/src/main/java/mjkf/xinke/main/modular/location/mapper/LocationMapper.java new file mode 100644 index 0000000..01254c0 --- /dev/null +++ b/src/main/java/mjkf/xinke/main/modular/location/mapper/LocationMapper.java @@ -0,0 +1,14 @@ + +package mjkf.xinke.main.modular.location.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import mjkf.xinke.main.modular.location.entity.Location; + +/** + * 料场位置Mapper接口 + * + * @author han0 + * @date 2024/09/10 10:36 + **/ +public interface LocationMapper extends BaseMapper { +} diff --git a/src/main/java/mjkf/xinke/main/modular/location/mapper/mapping/LocationMapper.xml b/src/main/java/mjkf/xinke/main/modular/location/mapper/mapping/LocationMapper.xml new file mode 100644 index 0000000..988b922 --- /dev/null +++ b/src/main/java/mjkf/xinke/main/modular/location/mapper/mapping/LocationMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/mjkf/xinke/main/modular/location/param/LocationAddParam.java b/src/main/java/mjkf/xinke/main/modular/location/param/LocationAddParam.java new file mode 100644 index 0000000..3ab729c --- /dev/null +++ b/src/main/java/mjkf/xinke/main/modular/location/param/LocationAddParam.java @@ -0,0 +1,32 @@ + +package mjkf.xinke.main.modular.location.param; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.math.BigDecimal; + +/** + * 料场位置添加参数 + * + * @author han0 + * @date 2024/09/10 10:36 + **/ +@Getter +@Setter +public class LocationAddParam { + + /** 名称 */ + @ApiModelProperty(value = "名称", position = 2) + private String name; + + /** 经度 */ + @ApiModelProperty(value = "经度", position = 3) + private BigDecimal lon; + + /** 纬度 */ + @ApiModelProperty(value = "纬度", position = 4) + private BigDecimal lat; + +} diff --git a/src/main/java/mjkf/xinke/main/modular/location/param/LocationEditParam.java b/src/main/java/mjkf/xinke/main/modular/location/param/LocationEditParam.java new file mode 100644 index 0000000..541fce7 --- /dev/null +++ b/src/main/java/mjkf/xinke/main/modular/location/param/LocationEditParam.java @@ -0,0 +1,34 @@ + +package mjkf.xinke.main.modular.location.param; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; +import java.math.BigDecimal; + +/** + * 料场位置编辑参数 + * + * @author han0 + * @date 2024/09/10 10:36 + **/ +@Getter +@Setter +public class LocationEditParam { + + /** id */ + @ApiModelProperty(value = "id", required = true, position = 1) + @NotBlank(message = "id不能为空") + private String id; + + /** 经度 */ + @ApiModelProperty(value = "经度", position = 3) + private BigDecimal lon; + + /** 纬度 */ + @ApiModelProperty(value = "纬度", position = 4) + private BigDecimal lat; + +} diff --git a/src/main/java/mjkf/xinke/main/modular/location/param/LocationIdParam.java b/src/main/java/mjkf/xinke/main/modular/location/param/LocationIdParam.java new file mode 100644 index 0000000..629ba1f --- /dev/null +++ b/src/main/java/mjkf/xinke/main/modular/location/param/LocationIdParam.java @@ -0,0 +1,24 @@ + +package mjkf.xinke.main.modular.location.param; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +/** + * 料场位置Id参数 + * + * @author han0 + * @date 2024/09/10 10:36 + **/ +@Getter +@Setter +public class LocationIdParam { + + /** id */ + @ApiModelProperty(value = "id", required = true) + @NotBlank(message = "id不能为空") + private String id; +} diff --git a/src/main/java/mjkf/xinke/main/modular/location/param/LocationKnownParam.java b/src/main/java/mjkf/xinke/main/modular/location/param/LocationKnownParam.java new file mode 100644 index 0000000..6985559 --- /dev/null +++ b/src/main/java/mjkf/xinke/main/modular/location/param/LocationKnownParam.java @@ -0,0 +1,22 @@ + +package mjkf.xinke.main.modular.location.param; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + * 料场位置查询参数 + * + * @author han0 + * @date 2024/09/10 10:36 + **/ +@Getter +@Setter +public class LocationKnownParam { + + /** 名称 */ + @ApiModelProperty(value = "名称") + private String name; + +} diff --git a/src/main/java/mjkf/xinke/main/modular/location/param/LocationPageParam.java b/src/main/java/mjkf/xinke/main/modular/location/param/LocationPageParam.java new file mode 100644 index 0000000..30d3823 --- /dev/null +++ b/src/main/java/mjkf/xinke/main/modular/location/param/LocationPageParam.java @@ -0,0 +1,38 @@ + +package mjkf.xinke.main.modular.location.param; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + * 料场位置查询参数 + * + * @author han0 + * @date 2024/09/10 10:36 + **/ +@Getter +@Setter +public class LocationPageParam { + + /** 当前页 */ + @ApiModelProperty(value = "当前页码") + private Integer current; + + /** 每页条数 */ + @ApiModelProperty(value = "每页条数") + private Integer size; + + /** 排序字段 */ + @ApiModelProperty(value = "排序字段,字段驼峰名称,如:userName") + private String sortField; + + /** 排序方式 */ + @ApiModelProperty(value = "排序方式,升序:ASCEND;降序:DESCEND") + private String sortOrder; + + /** 名称 */ + @ApiModelProperty(value = "名称") + private String name; + +} diff --git a/src/main/java/mjkf/xinke/main/modular/location/service/LocationService.java b/src/main/java/mjkf/xinke/main/modular/location/service/LocationService.java new file mode 100644 index 0000000..ab2a531 --- /dev/null +++ b/src/main/java/mjkf/xinke/main/modular/location/service/LocationService.java @@ -0,0 +1,93 @@ + +package mjkf.xinke.main.modular.location.service; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollStreamUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import mjkf.xinke.common.enums.CommonSortOrderEnum; +import mjkf.xinke.common.exception.CommonException; +import mjkf.xinke.common.page.CommonPageRequest; +import mjkf.xinke.main.modular.location.entity.Location; +import mjkf.xinke.main.modular.location.param.LocationAddParam; +import mjkf.xinke.main.modular.location.param.LocationEditParam; +import mjkf.xinke.main.modular.location.param.LocationIdParam; +import mjkf.xinke.main.modular.location.param.LocationPageParam; + +import java.io.Serializable; +import java.util.List; + +/** + * 料场位置Service类 + * + * @author han0 + * @date 2024/09/10 10:36 + **/ +@Service +public class LocationService extends ServiceImpl, Location> { + + + public Page page(LocationPageParam locationPageParam) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if(ObjectUtil.isNotEmpty(locationPageParam.getName())) { + queryWrapper.lambda().like(Location::getName, locationPageParam.getName()); + } + if(ObjectUtil.isAllNotEmpty(locationPageParam.getSortField(), locationPageParam.getSortOrder())) { + CommonSortOrderEnum.validate(locationPageParam.getSortOrder()); + queryWrapper.orderBy(true, locationPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()), + StrUtil.toUnderlineCase(locationPageParam.getSortField())); + } else { + queryWrapper.lambda().orderByAsc(Location::getId); + } + return this.page(CommonPageRequest.defaultPage(), queryWrapper); + } + + @Transactional(rollbackFor = Exception.class) + public Location add(LocationAddParam locationAddParam) { + Location location = BeanUtil.toBean(locationAddParam, Location.class); + this.save(location); + return location; + } + + @Transactional(rollbackFor = Exception.class) + public Location getByName(String name) { + var queryWrapper = new LambdaQueryWrapper(); + queryWrapper.eq(Location::getName, name); + var result = this.getOne(queryWrapper, false); + return result; + } + + @Transactional(rollbackFor = Exception.class) + public Location edit(LocationEditParam locationEditParam) { + Location location = this.queryEntity(locationEditParam.getId()); + BeanUtil.copyProperties(locationEditParam, location); + this.updateById(location); + return location; + } + + @Transactional(rollbackFor = Exception.class) + public void delete(List locationIdParamList) { + // 执行删除 + this.removeByIds(CollStreamUtil.toList(locationIdParamList, LocationIdParam::getId)); + } + + public Location detail(LocationIdParam locationIdParam) { + return this.queryEntity(locationIdParam.getId()); + } + + public Location queryEntity(Serializable id) { + Location location = this.getById(id); + if(ObjectUtil.isEmpty(location)) { + throw new CommonException("料场位置不存在,id值为:{}", id); + } + return location; + } + +} diff --git a/src/main/resources/_sql/init/mysql/v0.1.sql b/src/main/resources/_sql/init/mysql/v0.1.sql index ca9ad21..f9bc7dc 100644 --- a/src/main/resources/_sql/init/mysql/v0.1.sql +++ b/src/main/resources/_sql/init/mysql/v0.1.sql @@ -55,4 +55,19 @@ ALTER TABLE PRICE_RESULT ALTER TABLE PRICE_RESULT MODIFY COLUMN FLUCTUATING_FUJIAN decimal(16,4) DEFAULT '0.0000' COMMENT '住建厅浮动' AFTER PRICE_FUJIAN; - +-- todo 统一改为表定义: +-- material_manage.PRICE_RESULT +-- material_manage.PRICE_PUBLISH +-- material_manage.SANMING_STEEL +-- material_manage.FUJIAN_SURVEY +-- material_manage.FUZHOU_HIGHWAY_BUREAU +-- material_manage.FUZHOU_TRANSPORTATION_BUREAU +-- material_manage.LOCAL_MATERIAL +-- material_manage.MATERIAL +-- material_manage.MATERIAL_TASK +-- material_manage.DATA_FUJIAN +-- material_manage.DATA_GUANGDONG +-- material_manage.DATA_NETWORK +-- material_manage.DATA_ZHEJIANG +-- material_manage.BUDGET +-- material_manage.BUDGET_ITEM diff --git a/src/main/resources/_sql/init/mysql/v0.3.sql b/src/main/resources/_sql/init/mysql/v0.3.sql new file mode 100644 index 0000000..3ccc989 --- /dev/null +++ b/src/main/resources/_sql/init/mysql/v0.3.sql @@ -0,0 +1,14 @@ +create table LOCATION ( + ID varchar(32) not null comment 'id' primary key, + NAME varchar(128) not null comment '名称', + LON decimal(16, 7) default 0 comment '经度', + LAT decimal(16, 7) default 0 comment '纬度', + EXT_JSON longtext null comment '扩展信息', + TENANT_ID varchar(20) null comment '租户id', + DELETE_FLAG varchar(255) null comment '删除标志', + CREATE_TIME datetime null comment '创建时间', + CREATE_USER varchar(20) null comment '创建用户', + UPDATE_TIME datetime null comment '更新时间', + UPDATE_USER varchar(20) null comment '更新人' +) comment '料场位置'; +