15 changed files with 451 additions and 0 deletions
@ -0,0 +1,65 @@ |
|||
package cn.iocoder.yudao.module.system.controller.admin.config.Factory; |
|||
|
|||
import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
|||
import cn.iocoder.yudao.framework.common.pojo.PageResult; |
|||
import cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo.FactoryPageReqVO; |
|||
import cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo.FactoryRespVO; |
|||
import cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo.FactorySaveReqVO; |
|||
import cn.iocoder.yudao.module.system.convert.config.FactoryConvert; |
|||
import cn.iocoder.yudao.module.system.dal.dataobject.config.FactoryDO; |
|||
import cn.iocoder.yudao.module.system.service.config.Factory.FactoryService; |
|||
import io.swagger.v3.oas.annotations.Operation; |
|||
import io.swagger.v3.oas.annotations.tags.Tag; |
|||
import jakarta.annotation.Resource; |
|||
import jakarta.validation.Valid; |
|||
import org.springframework.validation.annotation.Validated; |
|||
import org.springframework.web.bind.annotation.*; |
|||
|
|||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
|||
|
|||
@Tag(name = "管理后台 - 厂级管理") |
|||
@RestController |
|||
@RequestMapping("/system/Factory") // 【注意】根据您的业务,这里可能应该是 /system/plant
|
|||
@Validated |
|||
public class FactoryController { |
|||
|
|||
@Resource |
|||
private FactoryService factoryService; // 变量名建议小写开头 factoryService
|
|||
|
|||
@GetMapping("/page") |
|||
@Operation(summary = "获得厂级分页列表") |
|||
public CommonResult<PageResult<FactoryRespVO>> getFactoryPage(@Valid FactoryPageReqVO reqVO) { |
|||
// 【核心修改】直接接收 Service 返回的 PageResult<FactoryRespVO>
|
|||
PageResult<FactoryRespVO> pageResult = factoryService.getFactoryPage(reqVO); |
|||
return success(pageResult); |
|||
} |
|||
|
|||
@GetMapping("/get") |
|||
@Operation(summary = "获得厂级详情") |
|||
public CommonResult<FactoryRespVO> getFactory(@RequestParam("id") Long id) { |
|||
FactoryDO factory = factoryService.getFactory(id); |
|||
// 【注意】这里也需要处理集团名称的关联显示,简单起见暂时保持原样
|
|||
// 理想情况下,getFactory 也应该返回一个包含 areaName 的 VO
|
|||
return success(FactoryConvert.INSTANCE.convert(factory)); |
|||
} |
|||
|
|||
@PostMapping("/create") |
|||
@Operation(summary = "创建厂级") |
|||
public CommonResult<Long> createFactory(@Valid @RequestBody FactorySaveReqVO reqVO) { |
|||
return success(factoryService.createFactory(reqVO)); |
|||
} |
|||
|
|||
@PutMapping("/update") |
|||
@Operation(summary = "修改厂级") |
|||
public CommonResult<Boolean> updateFactory(@Valid @RequestBody FactorySaveReqVO reqVO) { |
|||
factoryService.updateFactory(reqVO); |
|||
return success(true); |
|||
} |
|||
|
|||
@DeleteMapping("/delete") |
|||
@Operation(summary = "删除厂级") |
|||
public CommonResult<Boolean> deleteFactory(@RequestParam("id") Long id) { |
|||
factoryService.deleteFactory(id); |
|||
return success(true); |
|||
} |
|||
} |
@ -0,0 +1,24 @@ |
|||
package cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo; |
|||
|
|||
import io.swagger.v3.oas.annotations.media.Schema; |
|||
import lombok.Data; |
|||
|
|||
@Schema(description = "管理后台 - 厂级基础VO") |
|||
@Data |
|||
public class FactoryBaseVO { |
|||
|
|||
@Schema(description = "序号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
|||
|
|||
private Long id; |
|||
|
|||
@Schema(description = "厂级序号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1001") |
|||
|
|||
private Long num; |
|||
|
|||
@Schema(description = "厂级名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "测试厂级") |
|||
|
|||
private String name; |
|||
|
|||
@Schema(description = "厂级简称", requiredMode = Schema.RequiredMode.REQUIRED, example = "测试") |
|||
private String shortName; |
|||
} |
@ -0,0 +1,12 @@ |
|||
package cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo; |
|||
|
|||
import cn.iocoder.yudao.module.system.controller.admin.config.Company.vo.CompanyBaseVO; |
|||
import io.swagger.v3.oas.annotations.media.Schema; |
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
|
|||
@Schema(description = "管理后台 - 厂级创建请求VO") |
|||
@Data |
|||
@EqualsAndHashCode(callSuper = true) |
|||
public class FactoryCreateReqVO extends CompanyBaseVO { |
|||
} |
@ -0,0 +1,16 @@ |
|||
package cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo; |
|||
|
|||
import cn.iocoder.yudao.framework.common.pojo.PageParam; |
|||
import io.swagger.v3.oas.annotations.media.Schema; |
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
|
|||
@Schema(description = "管理后台 - 厂级分页请求VO") |
|||
@Data |
|||
@EqualsAndHashCode(callSuper = true) |
|||
public class FactoryPageReqVO extends PageParam { |
|||
|
|||
@Schema(description = "厂级名称", example = "测试") |
|||
private String name; |
|||
private Long num; |
|||
} |
@ -0,0 +1,22 @@ |
|||
package cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo; |
|||
|
|||
import io.swagger.v3.oas.annotations.media.Schema; |
|||
import lombok.Data; |
|||
import java.time.LocalDateTime; |
|||
|
|||
@Schema(description = "管理后台 - 电厂响应 VO") |
|||
@Data |
|||
public class FactoryRespVO { |
|||
@Schema(description = "电厂编号 (对应 plant_id)", requiredMode = Schema.RequiredMode.REQUIRED) |
|||
private Long id; |
|||
@Schema(description = "电厂名称 (对应 plant_name)", requiredMode = Schema.RequiredMode.REQUIRED) |
|||
private String name; |
|||
@Schema(description = "电厂简称 (对应 plant_shortname)") |
|||
private String shortName; |
|||
@Schema(description = "所属集团编号 (对应 area_id)", requiredMode = Schema.RequiredMode.REQUIRED) |
|||
private Long areaId; |
|||
@Schema(description = "所属集团名称 (后端关联查询得到)") |
|||
private String areaName; |
|||
@Schema(description = "创建时间") |
|||
private LocalDateTime createTime; |
|||
} |
@ -0,0 +1,37 @@ |
|||
// -----------------------------------------------------------------
|
|||
package cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo; |
|||
|
|||
import io.swagger.v3.oas.annotations.media.Schema; |
|||
import jakarta.validation.constraints.NotBlank; |
|||
import jakarta.validation.constraints.NotNull; |
|||
import jakarta.validation.constraints.Size; |
|||
|
|||
@Schema(description = "管理后台 - 电厂创建/修改 Request VO") |
|||
public class FactorySaveReqVO { |
|||
|
|||
@Schema(description = "电厂编号,更新时必填", example = "1") |
|||
private Long id; // 对应 plant_id
|
|||
|
|||
@Schema(description = "电厂名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "正宁电厂") |
|||
@NotBlank(message = "电厂名称不能为空") |
|||
@Size(max = 255) |
|||
private String name; // 对应 plant_name
|
|||
|
|||
@Schema(description = "电厂简称", example = "正宁") |
|||
@Size(max = 50) |
|||
private String shortName; // 对应 plant_shortname
|
|||
|
|||
@Schema(description = "所属集团编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "9") |
|||
@NotNull(message = "所属集团不能为空") |
|||
private Long areaId; // 对应 area_id
|
|||
|
|||
// --- Getter 和 Setter 方法 ---
|
|||
public Long getId() { return id; } |
|||
public void setId(Long id) { this.id = id; } |
|||
public String getName() { return name; } |
|||
public void setName(String name) { this.name = name; } |
|||
public String getShortName() { return shortName; } |
|||
public void setShortName(String shortName) { this.shortName = shortName; } |
|||
public Long getAreaId() { return areaId; } |
|||
public void setAreaId(Long areaId) { this.areaId = areaId; } |
|||
} |
@ -0,0 +1,16 @@ |
|||
package cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo; |
|||
|
|||
import cn.iocoder.yudao.module.system.controller.admin.config.Company.vo.CompanyBaseVO; |
|||
import io.swagger.v3.oas.annotations.media.Schema; |
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
|
|||
|
|||
@Schema(description = "管理后台 - 厂级更新请求VO") |
|||
@Data |
|||
@EqualsAndHashCode(callSuper = true) |
|||
public class FactoryUpdateReqVO extends CompanyBaseVO { |
|||
|
|||
@Schema(description = "序号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
|||
private Long id; |
|||
} |
@ -0,0 +1,28 @@ |
|||
package cn.iocoder.yudao.module.system.convert.config; |
|||
|
|||
import cn.iocoder.yudao.framework.common.pojo.PageResult; |
|||
import cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo.FactoryRespVO; |
|||
import cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo.FactorySaveReqVO; |
|||
import cn.iocoder.yudao.module.system.dal.dataobject.config.FactoryDO; |
|||
import org.mapstruct.Mapper; |
|||
import org.mapstruct.factory.Mappers; |
|||
import java.util.List; |
|||
|
|||
@Mapper(componentModel = "spring") // 【核心修正】添加 componentModel = "spring" 属性
|
|||
public interface FactoryConvert { |
|||
|
|||
FactoryConvert INSTANCE = Mappers.getMapper(FactoryConvert.class); |
|||
|
|||
// 将 SaveReqVO 转换为 DO
|
|||
FactoryDO convert(FactorySaveReqVO bean); |
|||
|
|||
// 将 DO 转换为 RespVO
|
|||
FactoryRespVO convert(FactoryDO bean); |
|||
|
|||
// 将 DO 列表转换为 RespVO 列表
|
|||
List<FactoryRespVO> convertList(List<FactoryDO> list); |
|||
|
|||
// 将 DO 分页 转换为 RespVO 分页
|
|||
PageResult<FactoryRespVO> convertPage(PageResult<FactoryDO> page); |
|||
|
|||
} |
@ -0,0 +1,30 @@ |
|||
package cn.iocoder.yudao.module.system.dal.dataobject.config; |
|||
|
|||
import com.baomidou.mybatisplus.annotation.TableField; |
|||
import com.baomidou.mybatisplus.annotation.TableId; |
|||
import com.baomidou.mybatisplus.annotation.TableName; |
|||
import lombok.*; |
|||
|
|||
@TableName("plant_cfg") |
|||
@Data |
|||
@Builder |
|||
@NoArgsConstructor |
|||
@AllArgsConstructor |
|||
public class FactoryDO { |
|||
|
|||
@TableId("plant_id") |
|||
private Long id; |
|||
|
|||
@TableField("plant_name") |
|||
private String name; |
|||
|
|||
@TableField("plant_shortname") |
|||
private String shortName; |
|||
|
|||
@TableField("area_id") |
|||
private Long areaId; |
|||
|
|||
@TableField(exist = false) |
|||
private String areaName; |
|||
|
|||
} |
@ -0,0 +1,16 @@ |
|||
package cn.iocoder.yudao.module.system.dal.mysql.config; |
|||
|
|||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
|||
import cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo.FactoryPageReqVO; |
|||
import cn.iocoder.yudao.module.system.dal.dataobject.config.FactoryDO; |
|||
import com.baomidou.mybatisplus.core.metadata.IPage; |
|||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
|||
import org.apache.ibatis.annotations.Mapper; |
|||
import org.apache.ibatis.annotations.Param; |
|||
|
|||
@Mapper |
|||
public interface FactoryMapper extends BaseMapperX<FactoryDO> { |
|||
|
|||
IPage<FactoryDO> selectFactoryPage(Page<?> page, @Param("reqVO") FactoryPageReqVO reqVO); |
|||
|
|||
} |
@ -0,0 +1,60 @@ |
|||
package cn.iocoder.yudao.module.system.service.config.Factory; |
|||
|
|||
import cn.iocoder.yudao.framework.common.pojo.PageResult; |
|||
import cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo.FactoryPageReqVO; |
|||
import cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo.FactoryRespVO; |
|||
import cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo.FactorySaveReqVO; |
|||
import cn.iocoder.yudao.module.system.dal.dataobject.config.FactoryDO; |
|||
import jakarta.validation.Valid; |
|||
import java.util.Collection; |
|||
import java.util.List; |
|||
|
|||
public interface FactoryService { |
|||
|
|||
/** |
|||
* 创建电厂 |
|||
* |
|||
* @param createReqVO 创建信息 |
|||
* @return 编号 |
|||
*/ |
|||
Long createFactory(@Valid FactorySaveReqVO createReqVO); |
|||
|
|||
/** |
|||
* 更新电厂 |
|||
* |
|||
* @param updateReqVO 更新信息 |
|||
*/ |
|||
void updateFactory(@Valid FactorySaveReqVO updateReqVO); |
|||
|
|||
/** |
|||
* 删除电厂 |
|||
* |
|||
* @param id 编号 |
|||
*/ |
|||
void deleteFactory(Long id); |
|||
|
|||
/** |
|||
* 获得电厂 |
|||
* |
|||
* @param id 编号 |
|||
* @return 电厂 |
|||
*/ |
|||
FactoryDO getFactory(Long id); |
|||
|
|||
/** |
|||
* 获得电厂列表 |
|||
* |
|||
* @param ids 编号 |
|||
* @return 电厂列表 |
|||
*/ |
|||
List<FactoryDO> getFactoryList(Collection<Long> ids); |
|||
|
|||
/** |
|||
* 获得电厂分页 |
|||
* |
|||
* @param pageReqVO 分页查询 |
|||
* @return 电厂分页 |
|||
*/ |
|||
PageResult<FactoryRespVO> getFactoryPage(FactoryPageReqVO pageReqVO); |
|||
|
|||
} |
@ -0,0 +1,70 @@ |
|||
package cn.iocoder.yudao.module.system.service.config.Factory; |
|||
|
|||
import cn.iocoder.yudao.framework.common.pojo.PageResult; |
|||
import cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo.FactoryPageReqVO; |
|||
import cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo.FactoryRespVO; |
|||
import cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo.FactorySaveReqVO; |
|||
import cn.iocoder.yudao.module.system.convert.config.FactoryConvert; |
|||
import cn.iocoder.yudao.module.system.dal.dataobject.config.FactoryDO; |
|||
import cn.iocoder.yudao.module.system.dal.mysql.config.FactoryMapper; |
|||
import com.baomidou.mybatisplus.core.metadata.IPage; // 【关键新增】导入 IPage 类
|
|||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; // 【关键新增】导入 Page 类
|
|||
import jakarta.annotation.Resource; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.validation.annotation.Validated; |
|||
|
|||
import java.util.Collection; |
|||
import java.util.Collections; |
|||
import java.util.List; |
|||
|
|||
@Service |
|||
@Validated |
|||
public class FactoryServiceImpl implements FactoryService { |
|||
|
|||
@Resource |
|||
private FactoryMapper factoryMapper; |
|||
@Resource |
|||
private FactoryConvert factoryConvert; |
|||
|
|||
@Override |
|||
public Long createFactory(FactorySaveReqVO createReqVO) { |
|||
FactoryDO factory = factoryConvert.convert(createReqVO); |
|||
factoryMapper.insert(factory); |
|||
return factory.getId(); |
|||
} |
|||
|
|||
@Override |
|||
public void updateFactory(FactorySaveReqVO updateReqVO) { |
|||
FactoryDO updateObj = factoryConvert.convert(updateReqVO); |
|||
factoryMapper.updateById(updateObj); |
|||
} |
|||
|
|||
@Override |
|||
public void deleteFactory(Long id) { |
|||
factoryMapper.deleteById(id); |
|||
} |
|||
|
|||
@Override |
|||
public FactoryDO getFactory(Long id) { |
|||
return factoryMapper.selectById(id); |
|||
} |
|||
|
|||
@Override |
|||
public List<FactoryDO> getFactoryList(Collection<Long> ids) { |
|||
if (ids == null || ids.isEmpty()) { |
|||
return Collections.emptyList(); |
|||
} |
|||
return factoryMapper.selectBatchIds(ids); |
|||
} |
|||
|
|||
@Override |
|||
public PageResult<FactoryRespVO> getFactoryPage(FactoryPageReqVO pageReqVO) { |
|||
// 1. 创建MyBatis-Plus的Page对象
|
|||
Page<FactoryDO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); |
|||
// 2. 调用我们新定义的、专门用于JOIN查询的Mapper方法
|
|||
IPage<FactoryDO> pageResult = factoryMapper.selectFactoryPage(page, pageReqVO); |
|||
// 3. 将MyBatis-Plus的IPage<DO>结果,转换为框架自定义的PageResult<VO>
|
|||
return new PageResult<>(factoryConvert.convertList(pageResult.getRecords()), pageResult.getTotal()); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,22 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
|||
<mapper namespace="cn.iocoder.yudao.module.system.dal.mysql.config.FactoryMapper"> |
|||
|
|||
<select id="selectFactoryPage" resultType="cn.iocoder.yudao.module.system.dal.dataobject.config.FactoryDO"> |
|||
SELECT |
|||
p.plant_id AS id, |
|||
p.plant_name AS name, |
|||
p.plant_shortname AS short_name, |
|||
p.area_id, |
|||
a.area_name AS area_name |
|||
FROM |
|||
plant_cfg AS p |
|||
LEFT JOIN area_cfg AS a ON p.area_id = a.area_id |
|||
<where> |
|||
<if test="reqVO.name != null and reqVO.name != ''"> |
|||
AND p.plant_name LIKE CONCAT('%', #{reqVO.name}, '%') |
|||
</if> |
|||
</where> |
|||
</select> |
|||
|
|||
</mapper> |
@ -0,0 +1,29 @@ |
|||
package cn.iocoder.yudao.server.config; |
|||
|
|||
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusPropertiesCustomizer; |
|||
import org.springframework.context.annotation.Bean; |
|||
import org.springframework.context.annotation.Configuration; |
|||
|
|||
/** |
|||
* MyBatis Plus 的自定义配置类 |
|||
* |
|||
* @author 芋道源码 |
|||
*/ |
|||
@Configuration |
|||
public class MybatisPlusCustomConfig { |
|||
|
|||
/** |
|||
* 创建一个 MybatisPlusPropertiesCustomizer Bean |
|||
* 用于在 Spring Boot 自动配置 MyBatis-Plus 之前,自定义其属性 |
|||
*/ |
|||
@Bean |
|||
public MybatisPlusPropertiesCustomizer mybatisPlusPropertiesCustomizer() { |
|||
return properties -> { |
|||
// 【核心配置】在这里用代码的方式,为 mybatis-plus.mapper-locations 赋上我们期望的值
|
|||
// "classpath*:mapper/**/*.xml" 会递归扫描所有模块下 resources/mapper 目录中的所有xml文件
|
|||
String[] mapperLocations = {"classpath*:mapper/**/*.xml"}; |
|||
properties.setMapperLocations(mapperLocations); |
|||
}; |
|||
} |
|||
|
|||
} |
Loading…
Reference in new issue