大屏部分信息更新

master
mhsnet 1 year ago
parent a761c0a931
commit 5ee11edf05

@ -9,4 +9,6 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode;
*/ */
public interface ErrorCodeConstants { public interface ErrorCodeConstants {
ErrorCode CLOUD_DESKTOP_USAGE_DURATION_NOT_EXISTS = new ErrorCode(1001000000, "云桌面使用时长不存在"); ErrorCode CLOUD_DESKTOP_USAGE_DURATION_NOT_EXISTS = new ErrorCode(1001000000, "云桌面使用时长不存在");
ErrorCode POLICY_NOT_EXISTS = new ErrorCode(1001000001, "政策动态不存在");
ErrorCode DISTRIBUTION_NOT_EXISTS = new ErrorCode(1001000002, "项目主要分布不存在");
} }

@ -73,5 +73,13 @@
<groupId>cn.iocoder.boot</groupId> <groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-biz-tenant</artifactId> <artifactId>yudao-spring-boot-starter-biz-tenant</artifactId>
</dependency> </dependency>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-biz-data-permission</artifactId>
</dependency>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-biz-data-permission</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>

@ -0,0 +1,102 @@
package cn.iocoder.yudao.module.bikmk.controller.admin.distribution;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*;
import cn.iocoder.yudao.module.bikmk.controller.admin.distribution.vo.*;
import cn.iocoder.yudao.module.bikmk.dal.dataobject.distribution.DistributionDO;
import cn.iocoder.yudao.module.bikmk.convert.distribution.DistributionConvert;
import cn.iocoder.yudao.module.bikmk.service.distribution.DistributionService;
@Tag(name = "凯密克AI后台 - 项目主要分布")
@RestController
@RequestMapping("/bikmk/distribution")
@Validated
public class DistributionController {
@Resource
private DistributionService distributionService;
@PostMapping("/create")
@Operation(summary = "创建项目主要分布")
@PreAuthorize("@ss.hasPermission('bikmk:distribution:create')")
public CommonResult<Long> createDistribution(@Valid @RequestBody DistributionCreateReqVO createReqVO) {
return success(distributionService.createDistribution(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新项目主要分布")
@PreAuthorize("@ss.hasPermission('bikmk:distribution:update')")
public CommonResult<Boolean> updateDistribution(@Valid @RequestBody DistributionUpdateReqVO updateReqVO) {
distributionService.updateDistribution(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除项目主要分布")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('bikmk:distribution:delete')")
public CommonResult<Boolean> deleteDistribution(@RequestParam("id") Long id) {
distributionService.deleteDistribution(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得项目主要分布")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('bikmk:distribution:query')")
public CommonResult<DistributionRespVO> getDistribution(@RequestParam("id") Long id) {
DistributionDO distribution = distributionService.getDistribution(id);
return success(DistributionConvert.INSTANCE.convert(distribution));
}
@GetMapping("/list")
@Operation(summary = "获得项目主要分布列表")
@Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
@PreAuthorize("@ss.hasPermission('bikmk:distribution:query')")
public CommonResult<List<DistributionRespVO>> getDistributionList(@RequestParam("ids") Collection<Long> ids) {
List<DistributionDO> list = distributionService.getDistributionList(ids);
return success(DistributionConvert.INSTANCE.convertList(list));
}
@GetMapping("/page")
@Operation(summary = "获得项目主要分布分页")
@PreAuthorize("@ss.hasPermission('bikmk:distribution:query')")
public CommonResult<PageResult<DistributionRespVO>> getDistributionPage(@Valid DistributionPageReqVO pageVO) {
PageResult<DistributionDO> pageResult = distributionService.getDistributionPage(pageVO);
return success(DistributionConvert.INSTANCE.convertPage(pageResult));
}
@GetMapping("/export-excel")
@Operation(summary = "导出项目主要分布 Excel")
@PreAuthorize("@ss.hasPermission('bikmk:distribution:export')")
@OperateLog(type = EXPORT)
public void exportDistributionExcel(@Valid DistributionExportReqVO exportReqVO,
HttpServletResponse response) throws IOException {
List<DistributionDO> list = distributionService.getDistributionList(exportReqVO);
// 导出 Excel
List<DistributionExcelVO> datas = DistributionConvert.INSTANCE.convertList02(list);
ExcelUtils.write(response, "项目主要分布.xls", "数据", DistributionExcelVO.class, datas);
}
}

@ -0,0 +1,29 @@
package cn.iocoder.yudao.module.bikmk.controller.admin.distribution.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import javax.validation.constraints.*;
/**
* Base VO VO 使
* VO Swagger
*/
@Data
public class DistributionBaseVO {
@Schema(description = "区域名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "福建省福州市仓山区")
@NotNull(message = "区域名称不能为空")
private String name;
@Schema(description = "地图圆圈大小", requiredMode = Schema.RequiredMode.REQUIRED, example = "20")
@NotNull(message = "地图圆圈大小不能为空")
private String value;
@Schema(description = "坐标", requiredMode = Schema.RequiredMode.REQUIRED, example = "[119.2735,26.0467]")
@NotNull(message = "坐标不能为空")
private String position;
}

@ -0,0 +1,14 @@
package cn.iocoder.yudao.module.bikmk.controller.admin.distribution.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 项目主要分布创建 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class DistributionCreateReqVO extends DistributionBaseVO {
}

@ -0,0 +1,34 @@
package cn.iocoder.yudao.module.bikmk.controller.admin.distribution.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.ExcelProperty;
/**
* Excel VO
*
* @author
*/
@Data
public class DistributionExcelVO {
@ExcelProperty("编号")
private Long id;
@ExcelProperty("区域名称")
private String name;
@ExcelProperty("地图圆圈大小")
private String value;
@ExcelProperty("坐标")
private String position;
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

@ -0,0 +1,29 @@
package cn.iocoder.yudao.module.bikmk.controller.admin.distribution.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import java.time.LocalDateTime;
import org.springframework.format.annotation.DateTimeFormat;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 项目主要分布 Excel 导出 Request VO参数和 DistributionPageReqVO 是一致的")
@Data
public class DistributionExportReqVO {
@Schema(description = "区域名称", example = "福建省福州市仓山区")
private String name;
@Schema(description = "地图圆圈大小", example = "20")
private String value;
@Schema(description = "坐标", example = "[119.2735,26.0467]")
private String position;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

@ -0,0 +1,31 @@
package cn.iocoder.yudao.module.bikmk.controller.admin.distribution.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 项目主要分布分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class DistributionPageReqVO extends PageParam {
@Schema(description = "区域名称", example = "福建省福州市仓山区")
private String name;
@Schema(description = "地图圆圈大小", example = "20")
private String value;
@Schema(description = "坐标", example = "[119.2735,26.0467]")
private String position;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

@ -0,0 +1,19 @@
package cn.iocoder.yudao.module.bikmk.controller.admin.distribution.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 项目主要分布 Response VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class DistributionRespVO extends DistributionBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23005")
private Long id;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime;
}

@ -0,0 +1,18 @@
package cn.iocoder.yudao.module.bikmk.controller.admin.distribution.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 项目主要分布更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class DistributionUpdateReqVO extends DistributionBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23005")
@NotNull(message = "编号不能为空")
private Long id;
}

@ -0,0 +1,111 @@
package cn.iocoder.yudao.module.bikmk.controller.admin.policy;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*;
import cn.iocoder.yudao.module.bikmk.controller.admin.policy.vo.*;
import cn.iocoder.yudao.module.bikmk.dal.dataobject.policy.PolicyDO;
import cn.iocoder.yudao.module.bikmk.convert.policy.PolicyConvert;
import cn.iocoder.yudao.module.bikmk.service.policy.PolicyService;
@Tag(name = "凯密克BI后台 - 政策动态")
@RestController
@RequestMapping("/bikmk/policy")
@Validated
public class PolicyController {
@Resource
private PolicyService policyService;
@PostMapping("/create")
@Operation(summary = "创建政策动态")
@PreAuthorize("@ss.hasPermission('bikmk:policy:create')")
public CommonResult<Long> createPolicy(@Valid @RequestBody PolicyCreateReqVO createReqVO) {
return success(policyService.createPolicy(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新政策动态")
@PreAuthorize("@ss.hasPermission('bikmk:policy:update')")
public CommonResult<Boolean> updatePolicy(@Valid @RequestBody PolicyUpdateReqVO updateReqVO) {
policyService.updatePolicy(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除政策动态")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('bikmk:policy:delete')")
public CommonResult<Boolean> deletePolicy(@RequestParam("id") Long id) {
policyService.deletePolicy(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得政策动态")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('bikmk:policy:query')")
public CommonResult<PolicyRespVO> getPolicy(@RequestParam("id") Long id) {
PolicyDO policy = policyService.getPolicy(id);
return success(PolicyConvert.INSTANCE.convert(policy));
}
@GetMapping("/list")
@Operation(summary = "获得政策动态列表")
@Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
@PreAuthorize("@ss.hasPermission('bikmk:policy:query')")
public CommonResult<List<PolicyRespVO>> getPolicyList(@RequestParam("ids") Collection<Long> ids) {
List<PolicyDO> list = policyService.getPolicyList(ids);
return success(PolicyConvert.INSTANCE.convertList(list));
}
@GetMapping("/listb")
@Operation(summary = "获得政策动态列表B")
@Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
@PreAuthorize("@ss.hasPermission('bikmk:policy:query')")
public CommonResult<List<PolicyRespVO>> getPolicyListB(@RequestParam("ids") Collection<Long> ids) {
List<PolicyDO> list = policyService.getPolicyList(ids);
return success(PolicyConvert.INSTANCE.convertList(list));
}
@GetMapping("/page")
@Operation(summary = "获得政策动态分页")
@PreAuthorize("@ss.hasPermission('bikmk:policy:query')")
public CommonResult<PageResult<PolicyRespVO>> getPolicyPage(@Valid PolicyPageReqVO pageVO) {
PageResult<PolicyDO> pageResult = policyService.getPolicyPage(pageVO);
return success(PolicyConvert.INSTANCE.convertPage(pageResult));
}
@GetMapping("/export-excel")
@Operation(summary = "导出政策动态 Excel")
@PreAuthorize("@ss.hasPermission('bikmk:policy:export')")
@OperateLog(type = EXPORT)
public void exportPolicyExcel(@Valid PolicyExportReqVO exportReqVO,
HttpServletResponse response) throws IOException {
List<PolicyDO> list = policyService.getPolicyList(exportReqVO);
// 导出 Excel
List<PolicyExcelVO> datas = PolicyConvert.INSTANCE.convertList02(list);
ExcelUtils.write(response, "政策动态.xls", "数据", PolicyExcelVO.class, datas);
}
}

@ -0,0 +1,29 @@
package cn.iocoder.yudao.module.bikmk.controller.admin.policy.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import javax.validation.constraints.*;
/**
* Base VO VO 使
* VO Swagger
*/
@Data
public class PolicyBaseVO {
@Schema(description = "区域", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "区域不能为空")
private String region;
@Schema(description = "政策信息", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "政策信息不能为空")
private String policy;
@Schema(description = "是否显示", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "是否显示不能为空")
private Boolean isshow;
}

@ -0,0 +1,14 @@
package cn.iocoder.yudao.module.bikmk.controller.admin.policy.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 政策动态创建 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class PolicyCreateReqVO extends PolicyBaseVO {
}

@ -0,0 +1,34 @@
package cn.iocoder.yudao.module.bikmk.controller.admin.policy.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.ExcelProperty;
/**
* Excel VO
*
* @author
*/
@Data
public class PolicyExcelVO {
@ExcelProperty("编号")
private Long id;
@ExcelProperty("区域")
private String region;
@ExcelProperty("政策信息")
private String policy;
@ExcelProperty("是否显示")
private Boolean isshow;
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

@ -0,0 +1,29 @@
package cn.iocoder.yudao.module.bikmk.controller.admin.policy.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import java.time.LocalDateTime;
import org.springframework.format.annotation.DateTimeFormat;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 政策动态 Excel 导出 Request VO参数和 PolicyPageReqVO 是一致的")
@Data
public class PolicyExportReqVO {
@Schema(description = "区域")
private String region;
@Schema(description = "政策信息")
private String policy;
@Schema(description = "是否显示")
private Boolean isshow;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

@ -0,0 +1,31 @@
package cn.iocoder.yudao.module.bikmk.controller.admin.policy.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 政策动态分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class PolicyPageReqVO extends PageParam {
@Schema(description = "区域")
private String region;
@Schema(description = "政策信息")
private String policy;
@Schema(description = "是否显示")
private Boolean isshow;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

@ -0,0 +1,19 @@
package cn.iocoder.yudao.module.bikmk.controller.admin.policy.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 政策动态 Response VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class PolicyRespVO extends PolicyBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "21159")
private Long id;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime;
}

@ -0,0 +1,18 @@
package cn.iocoder.yudao.module.bikmk.controller.admin.policy.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 政策动态更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class PolicyUpdateReqVO extends PolicyBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "21159")
@NotNull(message = "编号不能为空")
private Long id;
}

@ -0,0 +1,36 @@
package cn.iocoder.yudao.module.bikmk.controller.app.distribution;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.bikmk.controller.admin.distribution.vo.DistributionRespVO;
import cn.iocoder.yudao.module.bikmk.convert.distribution.DistributionConvert;
import cn.iocoder.yudao.module.bikmk.dal.dataobject.distribution.DistributionDO;
import cn.iocoder.yudao.module.bikmk.service.distribution.DistributionService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
@Tag(name = "凯密克AI - 项目主要分布")
@RestController
@RequestMapping("/bikmk/distribution")
@Validated
public class AppDistributionController {
@Resource
private DistributionService distributionService;
@GetMapping("/list")
@Operation(summary = "获得政策动态列表")
@DataPermission(enable = false)
public CommonResult<List<DistributionRespVO>> getAppDistributionList() {
List<DistributionDO> list = distributionService.getAppDistributionList();
return success(DistributionConvert.INSTANCE.convertList(list));
}
}

@ -0,0 +1,34 @@
package cn.iocoder.yudao.module.bikmk.controller.app.policy;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.bikmk.controller.admin.policy.vo.PolicyRespVO;
import cn.iocoder.yudao.module.bikmk.convert.policy.PolicyConvert;
import cn.iocoder.yudao.module.bikmk.dal.dataobject.policy.PolicyDO;
import cn.iocoder.yudao.module.bikmk.service.policy.PolicyService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "凯密克 - 政策动态")
@RestController
@RequestMapping("/bikmk/policy")
@Validated
public class AppPolicyController {
@Resource
private PolicyService policyService;
@GetMapping("/list")
@Operation(summary = "获得政策动态列表")
public CommonResult<List<PolicyRespVO>> getPolicyList() {
List<PolicyDO> list = policyService.getAppPolicyList();
return success(PolicyConvert.INSTANCE.convertList(list));
}
}

@ -0,0 +1,34 @@
package cn.iocoder.yudao.module.bikmk.convert.distribution;
import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import cn.iocoder.yudao.module.bikmk.controller.admin.distribution.vo.*;
import cn.iocoder.yudao.module.bikmk.dal.dataobject.distribution.DistributionDO;
/**
* Convert
*
* @author
*/
@Mapper
public interface DistributionConvert {
DistributionConvert INSTANCE = Mappers.getMapper(DistributionConvert.class);
DistributionDO convert(DistributionCreateReqVO bean);
DistributionDO convert(DistributionUpdateReqVO bean);
DistributionRespVO convert(DistributionDO bean);
List<DistributionRespVO> convertList(List<DistributionDO> list);
PageResult<DistributionRespVO> convertPage(PageResult<DistributionDO> page);
List<DistributionExcelVO> convertList02(List<DistributionDO> list);
}

@ -0,0 +1,34 @@
package cn.iocoder.yudao.module.bikmk.convert.policy;
import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import cn.iocoder.yudao.module.bikmk.controller.admin.policy.vo.*;
import cn.iocoder.yudao.module.bikmk.dal.dataobject.policy.PolicyDO;
/**
* Convert
*
* @author
*/
@Mapper
public interface PolicyConvert {
PolicyConvert INSTANCE = Mappers.getMapper(PolicyConvert.class);
PolicyDO convert(PolicyCreateReqVO bean);
PolicyDO convert(PolicyUpdateReqVO bean);
PolicyRespVO convert(PolicyDO bean);
List<PolicyRespVO> convertList(List<PolicyDO> list);
PageResult<PolicyRespVO> convertPage(PageResult<PolicyDO> page);
List<PolicyExcelVO> convertList02(List<PolicyDO> list);
}

@ -0,0 +1,43 @@
package cn.iocoder.yudao.module.bikmk.dal.dataobject.distribution;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* DO
*
* @author
*/
@TableName("bikmk_distribution")
@KeySequence("bikmk_distribution_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DistributionDO extends BaseDO {
/**
*
*/
@TableId
private Long id;
/**
*
*/
private String name;
/**
*
*/
private String value;
/**
*
*/
private String position;
}

@ -0,0 +1,43 @@
package cn.iocoder.yudao.module.bikmk.dal.dataobject.policy;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* DO
*
* @author
*/
@TableName("bikmk_policy")
@KeySequence("bikmk_policy_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PolicyDO extends BaseDO {
/**
*
*/
@TableId
private Long id;
/**
*
*/
private String region;
/**
*
*/
private String policy;
/**
*
*/
private Boolean isshow;
}

@ -0,0 +1,38 @@
package cn.iocoder.yudao.module.bikmk.dal.mysql.distribution;
import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.bikmk.dal.dataobject.distribution.DistributionDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.bikmk.controller.admin.distribution.vo.*;
/**
* Mapper
*
* @author
*/
@Mapper
public interface DistributionMapper extends BaseMapperX<DistributionDO> {
default PageResult<DistributionDO> selectPage(DistributionPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<DistributionDO>()
.likeIfPresent(DistributionDO::getName, reqVO.getName())
.eqIfPresent(DistributionDO::getValue, reqVO.getValue())
.eqIfPresent(DistributionDO::getPosition, reqVO.getPosition())
.betweenIfPresent(DistributionDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(DistributionDO::getId));
}
default List<DistributionDO> selectList(DistributionExportReqVO reqVO) {
return selectList(new LambdaQueryWrapperX<DistributionDO>()
.likeIfPresent(DistributionDO::getName, reqVO.getName())
.eqIfPresent(DistributionDO::getValue, reqVO.getValue())
.eqIfPresent(DistributionDO::getPosition, reqVO.getPosition())
.betweenIfPresent(DistributionDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(DistributionDO::getId));
}
}

@ -0,0 +1,38 @@
package cn.iocoder.yudao.module.bikmk.dal.mysql.policy;
import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.bikmk.dal.dataobject.policy.PolicyDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.bikmk.controller.admin.policy.vo.*;
/**
* Mapper
*
* @author
*/
@Mapper
public interface PolicyMapper extends BaseMapperX<PolicyDO> {
default PageResult<PolicyDO> selectPage(PolicyPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<PolicyDO>()
.eqIfPresent(PolicyDO::getRegion, reqVO.getRegion())
.eqIfPresent(PolicyDO::getPolicy, reqVO.getPolicy())
.eqIfPresent(PolicyDO::getIsshow, reqVO.getIsshow())
.betweenIfPresent(PolicyDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(PolicyDO::getId));
}
default List<PolicyDO> selectList(PolicyExportReqVO reqVO) {
return selectList(new LambdaQueryWrapperX<PolicyDO>()
.eqIfPresent(PolicyDO::getRegion, reqVO.getRegion())
.eqIfPresent(PolicyDO::getPolicy, reqVO.getPolicy())
.eqIfPresent(PolicyDO::getIsshow, reqVO.getIsshow())
.betweenIfPresent(PolicyDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(PolicyDO::getId));
}
}

@ -0,0 +1,71 @@
package cn.iocoder.yudao.module.bikmk.service.distribution;
import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.bikmk.controller.admin.distribution.vo.*;
import cn.iocoder.yudao.module.bikmk.dal.dataobject.distribution.DistributionDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
/**
* Service
*
* @author
*/
public interface DistributionService {
/**
*
*
* @param createReqVO
* @return
*/
Long createDistribution(@Valid DistributionCreateReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateDistribution(@Valid DistributionUpdateReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteDistribution(Long id);
/**
*
*
* @param id
* @return
*/
DistributionDO getDistribution(Long id);
/**
*
*
* @param ids
* @return
*/
List<DistributionDO> getDistributionList(Collection<Long> ids);
List<DistributionDO> getAppDistributionList();
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<DistributionDO> getDistributionPage(DistributionPageReqVO pageReqVO);
/**
* , Excel
*
* @param exportReqVO
* @return
*/
List<DistributionDO> getDistributionList(DistributionExportReqVO exportReqVO);
}

@ -0,0 +1,87 @@
package cn.iocoder.yudao.module.bikmk.service.distribution;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import java.util.*;
import cn.iocoder.yudao.module.bikmk.controller.admin.distribution.vo.*;
import cn.iocoder.yudao.module.bikmk.dal.dataobject.distribution.DistributionDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.bikmk.convert.distribution.DistributionConvert;
import cn.iocoder.yudao.module.bikmk.dal.mysql.distribution.DistributionMapper;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.bikmk.enums.ErrorCodeConstants.*;
/**
* Service
*
* @author
*/
@Service
@Validated
public class DistributionServiceImpl implements DistributionService {
@Resource
private DistributionMapper distributionMapper;
@Override
public Long createDistribution(DistributionCreateReqVO createReqVO) {
// 插入
DistributionDO distribution = DistributionConvert.INSTANCE.convert(createReqVO);
distributionMapper.insert(distribution);
// 返回
return distribution.getId();
}
@Override
public void updateDistribution(DistributionUpdateReqVO updateReqVO) {
// 校验存在
validateDistributionExists(updateReqVO.getId());
// 更新
DistributionDO updateObj = DistributionConvert.INSTANCE.convert(updateReqVO);
distributionMapper.updateById(updateObj);
}
@Override
public void deleteDistribution(Long id) {
// 校验存在
validateDistributionExists(id);
// 删除
distributionMapper.deleteById(id);
}
private void validateDistributionExists(Long id) {
if (distributionMapper.selectById(id) == null) {
throw exception(DISTRIBUTION_NOT_EXISTS);
}
}
@Override
public DistributionDO getDistribution(Long id) {
return distributionMapper.selectById(id);
}
@Override
public List<DistributionDO> getDistributionList(Collection<Long> ids) {
return distributionMapper.selectBatchIds(ids);
}
@Override
public List<DistributionDO> getAppDistributionList() {
return distributionMapper.selectList();
}
@Override
public PageResult<DistributionDO> getDistributionPage(DistributionPageReqVO pageReqVO) {
return distributionMapper.selectPage(pageReqVO);
}
@Override
public List<DistributionDO> getDistributionList(DistributionExportReqVO exportReqVO) {
return distributionMapper.selectList(exportReqVO);
}
}

@ -0,0 +1,71 @@
package cn.iocoder.yudao.module.bikmk.service.policy;
import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.bikmk.controller.admin.policy.vo.*;
import cn.iocoder.yudao.module.bikmk.dal.dataobject.policy.PolicyDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
/**
* Service
*
* @author
*/
public interface PolicyService {
/**
*
*
* @param createReqVO
* @return
*/
Long createPolicy(@Valid PolicyCreateReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updatePolicy(@Valid PolicyUpdateReqVO updateReqVO);
/**
*
*
* @param id
*/
void deletePolicy(Long id);
/**
*
*
* @param id
* @return
*/
PolicyDO getPolicy(Long id);
/**
*
*
* @param ids
* @return
*/
List<PolicyDO> getPolicyList(Collection<Long> ids);
List<PolicyDO> getAppPolicyList();
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<PolicyDO> getPolicyPage(PolicyPageReqVO pageReqVO);
/**
* , Excel
*
* @param exportReqVO
* @return
*/
List<PolicyDO> getPolicyList(PolicyExportReqVO exportReqVO);
}

@ -0,0 +1,87 @@
package cn.iocoder.yudao.module.bikmk.service.policy;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import java.util.*;
import cn.iocoder.yudao.module.bikmk.controller.admin.policy.vo.*;
import cn.iocoder.yudao.module.bikmk.dal.dataobject.policy.PolicyDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.bikmk.convert.policy.PolicyConvert;
import cn.iocoder.yudao.module.bikmk.dal.mysql.policy.PolicyMapper;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.bikmk.enums.ErrorCodeConstants.*;
/**
* Service
*
* @author
*/
@Service
@Validated
public class PolicyServiceImpl implements PolicyService {
@Resource
private PolicyMapper policyMapper;
@Override
public Long createPolicy(PolicyCreateReqVO createReqVO) {
// 插入
PolicyDO policy = PolicyConvert.INSTANCE.convert(createReqVO);
policyMapper.insert(policy);
// 返回
return policy.getId();
}
@Override
public void updatePolicy(PolicyUpdateReqVO updateReqVO) {
// 校验存在
validatePolicyExists(updateReqVO.getId());
// 更新
PolicyDO updateObj = PolicyConvert.INSTANCE.convert(updateReqVO);
policyMapper.updateById(updateObj);
}
@Override
public void deletePolicy(Long id) {
// 校验存在
validatePolicyExists(id);
// 删除
policyMapper.deleteById(id);
}
private void validatePolicyExists(Long id) {
if (policyMapper.selectById(id) == null) {
throw exception(POLICY_NOT_EXISTS);
}
}
@Override
public PolicyDO getPolicy(Long id) {
return policyMapper.selectById(id);
}
@Override
public List<PolicyDO> getPolicyList(Collection<Long> ids) {
return policyMapper.selectBatchIds(ids);
}
@Override
public List<PolicyDO> getAppPolicyList() {
return policyMapper.selectList();
}
@Override
public PageResult<PolicyDO> getPolicyPage(PolicyPageReqVO pageReqVO) {
return policyMapper.selectPage(pageReqVO);
}
@Override
public List<PolicyDO> getPolicyList(PolicyExportReqVO exportReqVO) {
return policyMapper.selectList(exportReqVO);
}
}

@ -0,0 +1,12 @@
<?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.bikmk.dal.mysql.distribution.DistributionMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

@ -0,0 +1,12 @@
<?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.bikmk.dal.mysql.policy.PolicyMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

@ -0,0 +1,175 @@
package cn.iocoder.yudao.module.bikmk.service.distribution;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import javax.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.bikmk.controller.admin.distribution.vo.*;
import cn.iocoder.yudao.module.bikmk.dal.dataobject.distribution.DistributionDO;
import cn.iocoder.yudao.module.bikmk.dal.mysql.distribution.DistributionMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import javax.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static cn.iocoder.yudao.module.bikmk.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*;
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*;
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link DistributionServiceImpl}
*
* @author
*/
@Import(DistributionServiceImpl.class)
public class DistributionServiceImplTest extends BaseDbUnitTest {
@Resource
private DistributionServiceImpl distributionService;
@Resource
private DistributionMapper distributionMapper;
@Test
public void testCreateDistribution_success() {
// 准备参数
DistributionCreateReqVO reqVO = randomPojo(DistributionCreateReqVO.class);
// 调用
Long distributionId = distributionService.createDistribution(reqVO);
// 断言
assertNotNull(distributionId);
// 校验记录的属性是否正确
DistributionDO distribution = distributionMapper.selectById(distributionId);
assertPojoEquals(reqVO, distribution);
}
@Test
public void testUpdateDistribution_success() {
// mock 数据
DistributionDO dbDistribution = randomPojo(DistributionDO.class);
distributionMapper.insert(dbDistribution);// @Sql: 先插入出一条存在的数据
// 准备参数
DistributionUpdateReqVO reqVO = randomPojo(DistributionUpdateReqVO.class, o -> {
o.setId(dbDistribution.getId()); // 设置更新的 ID
});
// 调用
distributionService.updateDistribution(reqVO);
// 校验是否更新正确
DistributionDO distribution = distributionMapper.selectById(reqVO.getId()); // 获取最新的
assertPojoEquals(reqVO, distribution);
}
@Test
public void testUpdateDistribution_notExists() {
// 准备参数
DistributionUpdateReqVO reqVO = randomPojo(DistributionUpdateReqVO.class);
// 调用, 并断言异常
assertServiceException(() -> distributionService.updateDistribution(reqVO), DISTRIBUTION_NOT_EXISTS);
}
@Test
public void testDeleteDistribution_success() {
// mock 数据
DistributionDO dbDistribution = randomPojo(DistributionDO.class);
distributionMapper.insert(dbDistribution);// @Sql: 先插入出一条存在的数据
// 准备参数
Long id = dbDistribution.getId();
// 调用
distributionService.deleteDistribution(id);
// 校验数据不存在了
assertNull(distributionMapper.selectById(id));
}
@Test
public void testDeleteDistribution_notExists() {
// 准备参数
Long id = randomLongId();
// 调用, 并断言异常
assertServiceException(() -> distributionService.deleteDistribution(id), DISTRIBUTION_NOT_EXISTS);
}
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetDistributionPage() {
// mock 数据
DistributionDO dbDistribution = randomPojo(DistributionDO.class, o -> { // 等会查询到
o.setName(null);
o.setValue(null);
o.setPosition(null);
o.setCreateTime(null);
});
distributionMapper.insert(dbDistribution);
// 测试 name 不匹配
distributionMapper.insert(cloneIgnoreId(dbDistribution, o -> o.setName(null)));
// 测试 value 不匹配
distributionMapper.insert(cloneIgnoreId(dbDistribution, o -> o.setValue(null)));
// 测试 position 不匹配
distributionMapper.insert(cloneIgnoreId(dbDistribution, o -> o.setPosition(null)));
// 测试 createTime 不匹配
distributionMapper.insert(cloneIgnoreId(dbDistribution, o -> o.setCreateTime(null)));
// 准备参数
DistributionPageReqVO reqVO = new DistributionPageReqVO();
reqVO.setName(null);
reqVO.setValue(null);
reqVO.setPosition(null);
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
PageResult<DistributionDO> pageResult = distributionService.getDistributionPage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());
assertPojoEquals(dbDistribution, pageResult.getList().get(0));
}
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetDistributionList() {
// mock 数据
DistributionDO dbDistribution = randomPojo(DistributionDO.class, o -> { // 等会查询到
o.setName(null);
o.setValue(null);
o.setPosition(null);
o.setCreateTime(null);
});
distributionMapper.insert(dbDistribution);
// 测试 name 不匹配
distributionMapper.insert(cloneIgnoreId(dbDistribution, o -> o.setName(null)));
// 测试 value 不匹配
distributionMapper.insert(cloneIgnoreId(dbDistribution, o -> o.setValue(null)));
// 测试 position 不匹配
distributionMapper.insert(cloneIgnoreId(dbDistribution, o -> o.setPosition(null)));
// 测试 createTime 不匹配
distributionMapper.insert(cloneIgnoreId(dbDistribution, o -> o.setCreateTime(null)));
// 准备参数
DistributionExportReqVO reqVO = new DistributionExportReqVO();
reqVO.setName(null);
reqVO.setValue(null);
reqVO.setPosition(null);
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
List<DistributionDO> list = distributionService.getDistributionList(reqVO);
// 断言
assertEquals(1, list.size());
assertPojoEquals(dbDistribution, list.get(0));
}
}

@ -0,0 +1,175 @@
package cn.iocoder.yudao.module.bikmk.service.policy;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import javax.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.bikmk.controller.admin.policy.vo.*;
import cn.iocoder.yudao.module.bikmk.dal.dataobject.policy.PolicyDO;
import cn.iocoder.yudao.module.bikmk.dal.mysql.policy.PolicyMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import javax.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static cn.iocoder.yudao.module.bikmk.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*;
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*;
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link PolicyServiceImpl}
*
* @author
*/
@Import(PolicyServiceImpl.class)
public class PolicyServiceImplTest extends BaseDbUnitTest {
@Resource
private PolicyServiceImpl policyService;
@Resource
private PolicyMapper policyMapper;
@Test
public void testCreatePolicy_success() {
// 准备参数
PolicyCreateReqVO reqVO = randomPojo(PolicyCreateReqVO.class);
// 调用
Long policyId = policyService.createPolicy(reqVO);
// 断言
assertNotNull(policyId);
// 校验记录的属性是否正确
PolicyDO policy = policyMapper.selectById(policyId);
assertPojoEquals(reqVO, policy);
}
@Test
public void testUpdatePolicy_success() {
// mock 数据
PolicyDO dbPolicy = randomPojo(PolicyDO.class);
policyMapper.insert(dbPolicy);// @Sql: 先插入出一条存在的数据
// 准备参数
PolicyUpdateReqVO reqVO = randomPojo(PolicyUpdateReqVO.class, o -> {
o.setId(dbPolicy.getId()); // 设置更新的 ID
});
// 调用
policyService.updatePolicy(reqVO);
// 校验是否更新正确
PolicyDO policy = policyMapper.selectById(reqVO.getId()); // 获取最新的
assertPojoEquals(reqVO, policy);
}
@Test
public void testUpdatePolicy_notExists() {
// 准备参数
PolicyUpdateReqVO reqVO = randomPojo(PolicyUpdateReqVO.class);
// 调用, 并断言异常
assertServiceException(() -> policyService.updatePolicy(reqVO), POLICY_NOT_EXISTS);
}
@Test
public void testDeletePolicy_success() {
// mock 数据
PolicyDO dbPolicy = randomPojo(PolicyDO.class);
policyMapper.insert(dbPolicy);// @Sql: 先插入出一条存在的数据
// 准备参数
Long id = dbPolicy.getId();
// 调用
policyService.deletePolicy(id);
// 校验数据不存在了
assertNull(policyMapper.selectById(id));
}
@Test
public void testDeletePolicy_notExists() {
// 准备参数
Long id = randomLongId();
// 调用, 并断言异常
assertServiceException(() -> policyService.deletePolicy(id), POLICY_NOT_EXISTS);
}
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetPolicyPage() {
// mock 数据
PolicyDO dbPolicy = randomPojo(PolicyDO.class, o -> { // 等会查询到
o.setRegion(null);
o.setPolicy(null);
o.setIsshow(null);
o.setCreateTime(null);
});
policyMapper.insert(dbPolicy);
// 测试 region 不匹配
policyMapper.insert(cloneIgnoreId(dbPolicy, o -> o.setRegion(null)));
// 测试 policy 不匹配
policyMapper.insert(cloneIgnoreId(dbPolicy, o -> o.setPolicy(null)));
// 测试 isshow 不匹配
policyMapper.insert(cloneIgnoreId(dbPolicy, o -> o.setIsshow(null)));
// 测试 createTime 不匹配
policyMapper.insert(cloneIgnoreId(dbPolicy, o -> o.setCreateTime(null)));
// 准备参数
PolicyPageReqVO reqVO = new PolicyPageReqVO();
reqVO.setRegion(null);
reqVO.setPolicy(null);
reqVO.setIsshow(null);
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
PageResult<PolicyDO> pageResult = policyService.getPolicyPage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());
assertPojoEquals(dbPolicy, pageResult.getList().get(0));
}
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetPolicyList() {
// mock 数据
PolicyDO dbPolicy = randomPojo(PolicyDO.class, o -> { // 等会查询到
o.setRegion(null);
o.setPolicy(null);
o.setIsshow(null);
o.setCreateTime(null);
});
policyMapper.insert(dbPolicy);
// 测试 region 不匹配
policyMapper.insert(cloneIgnoreId(dbPolicy, o -> o.setRegion(null)));
// 测试 policy 不匹配
policyMapper.insert(cloneIgnoreId(dbPolicy, o -> o.setPolicy(null)));
// 测试 isshow 不匹配
policyMapper.insert(cloneIgnoreId(dbPolicy, o -> o.setIsshow(null)));
// 测试 createTime 不匹配
policyMapper.insert(cloneIgnoreId(dbPolicy, o -> o.setCreateTime(null)));
// 准备参数
PolicyExportReqVO reqVO = new PolicyExportReqVO();
reqVO.setRegion(null);
reqVO.setPolicy(null);
reqVO.setIsshow(null);
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
List<PolicyDO> list = policyService.getPolicyList(reqVO);
// 断言
assertEquals(1, list.size());
assertPojoEquals(dbPolicy, list.get(0));
}
}

@ -32,6 +32,15 @@ public class GoViewDataController {
@Resource @Resource
private GoViewDataService goViewDataService; private GoViewDataService goViewDataService;
@RequestMapping("/bikmk-distribution-list")
@Operation(summary = "查询分布信息")
@PreAuthorize("@ss.hasPermission('report:go-view-data:bikmk-distribution')")
@OperateLog(enable = false) // 不记录操作日志,因为不需要
public CommonResult<GoViewDataRespVO> bikmkDistributionList() {
//return success(goViewDataService.getDataBySQL(reqVO.getSql()));
return success(goViewDataService.getDataBySQL("select * from bikmk_distribution"));
}
@RequestMapping("/get-by-sql") @RequestMapping("/get-by-sql")
@Operation(summary = "使用 SQL 查询数据") @Operation(summary = "使用 SQL 查询数据")
@PreAuthorize("@ss.hasPermission('report:go-view-data:get-by-sql')") @PreAuthorize("@ss.hasPermission('report:go-view-data:get-by-sql')")

@ -0,0 +1,54 @@
import request from '@/utils/request'
// 创建项目主要分布
export function createDistribution(data) {
return request({
url: '/bikmk/distribution/create',
method: 'post',
data: data
})
}
// 更新项目主要分布
export function updateDistribution(data) {
return request({
url: '/bikmk/distribution/update',
method: 'put',
data: data
})
}
// 删除项目主要分布
export function deleteDistribution(id) {
return request({
url: '/bikmk/distribution/delete?id=' + id,
method: 'delete'
})
}
// 获得项目主要分布
export function getDistribution(id) {
return request({
url: '/bikmk/distribution/get?id=' + id,
method: 'get'
})
}
// 获得项目主要分布分页
export function getDistributionPage(query) {
return request({
url: '/bikmk/distribution/page',
method: 'get',
params: query
})
}
// 导出项目主要分布 Excel
export function exportDistributionExcel(query) {
return request({
url: '/bikmk/distribution/export-excel',
method: 'get',
params: query,
responseType: 'blob'
})
}

@ -0,0 +1,54 @@
import request from '@/utils/request'
// 创建政策动态
export function createPolicy(data) {
return request({
url: '/bikmk/policy/create',
method: 'post',
data: data
})
}
// 更新政策动态
export function updatePolicy(data) {
return request({
url: '/bikmk/policy/update',
method: 'put',
data: data
})
}
// 删除政策动态
export function deletePolicy(id) {
return request({
url: '/bikmk/policy/delete?id=' + id,
method: 'delete'
})
}
// 获得政策动态
export function getPolicy(id) {
return request({
url: '/bikmk/policy/get?id=' + id,
method: 'get'
})
}
// 获得政策动态分页
export function getPolicyPage(query) {
return request({
url: '/bikmk/policy/page',
method: 'get',
params: query
})
}
// 导出政策动态 Excel
export function exportPolicyExcel(query) {
return request({
url: '/bikmk/policy/export-excel',
method: 'get',
params: query,
responseType: 'blob'
})
}

@ -0,0 +1,229 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="区域名称" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入区域名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="地图圆圈大小" prop="value">
<el-input v-model="queryParams.value" placeholder="请输入地图圆圈大小" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="坐标" prop="position">
<el-input v-model="queryParams.position" placeholder="请输入坐标" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['bikmk:distribution:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['bikmk:distribution:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="编号" align="center" prop="id" />
<el-table-column label="区域名称" align="center" prop="name" />
<el-table-column label="地图圆圈大小" align="center" prop="value" />
<el-table-column label="坐标" align="center" prop="position" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template v-slot="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template v-slot="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['bikmk:distribution:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['bikmk:distribution:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" v-dialogDrag append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="区域名称" prop="name">
<el-input v-model="form.name" placeholder="请输入区域名称" />
</el-form-item>
<el-form-item label="地图圆圈大小" prop="value">
<el-input v-model="form.value" placeholder="请输入地图圆圈大小" />
</el-form-item>
<el-form-item label="坐标" prop="position">
<el-input v-model="form.position" placeholder="请输入坐标" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createDistribution, updateDistribution, deleteDistribution, getDistribution, getDistributionPage, exportDistributionExcel } from "@/api/bikmk/distribution";
export default {
name: "Distribution",
components: {
},
data() {
return {
//
loading: true,
//
exportLoading: false,
//
showSearch: true,
//
total: 0,
//
list: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNo: 1,
pageSize: 10,
name: null,
value: null,
position: null,
createTime: [],
},
//
form: {},
//
rules: {
name: [{ required: true, message: "区域名称不能为空", trigger: "blur" }],
value: [{ required: true, message: "地图圆圈大小不能为空", trigger: "blur" }],
position: [{ required: true, message: "坐标不能为空", trigger: "blur" }],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
//
getDistributionPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
name: undefined,
value: undefined,
position: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加项目主要分布";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getDistribution(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改项目主要分布";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
//
if (this.form.id != null) {
updateDistribution(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
//
createDistribution(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除项目主要分布编号为"' + id + '"的数据项?').then(function() {
return deleteDistribution(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
//
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有项目主要分布数据项?').then(() => {
this.exportLoading = true;
return exportDistributionExcel(params);
}).then(response => {
this.$download.excel(response, '项目主要分布.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

@ -0,0 +1,237 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="区域" prop="region">
<el-select v-model="queryParams.region" placeholder="请选择区域" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="政策信息" prop="policy">
<el-input v-model="queryParams.policy" placeholder="请输入政策信息" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="是否显示" prop="isshow">
<el-select v-model="queryParams.isshow" placeholder="请选择是否显示" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['bikmk:policy:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['bikmk:policy:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="编号" align="center" prop="id" />
<el-table-column label="区域" align="center" prop="region" />
<el-table-column label="政策信息" align="center" prop="policy" />
<el-table-column label="是否显示" align="center" prop="isshow" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template v-slot="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template v-slot="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['bikmk:policy:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['bikmk:policy:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" v-dialogDrag append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="区域" prop="region">
<el-select v-model="form.region" placeholder="请选择区域">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="政策信息" prop="policy">
<el-input v-model="form.policy" placeholder="请输入政策信息" />
</el-form-item>
<el-form-item label="是否显示" prop="isshow">
<el-radio-group v-model="form.isshow">
<el-radio label="1">请选择字典生成</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createPolicy, updatePolicy, deletePolicy, getPolicy, getPolicyPage, exportPolicyExcel } from "@/api/bikmk/policy";
export default {
name: "Policy",
components: {
},
data() {
return {
//
loading: true,
//
exportLoading: false,
//
showSearch: true,
//
total: 0,
//
list: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNo: 1,
pageSize: 10,
region: null,
policy: null,
isshow: null,
createTime: [],
},
//
form: {},
//
rules: {
region: [{ required: true, message: "区域不能为空", trigger: "change" }],
policy: [{ required: true, message: "政策信息不能为空", trigger: "blur" }],
isshow: [{ required: true, message: "是否显示不能为空", trigger: "blur" }],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
//
getPolicyPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
region: undefined,
policy: undefined,
isshow: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加政策动态";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getPolicy(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改政策动态";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
//
if (this.form.id != null) {
updatePolicy(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
//
createPolicy(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除政策动态编号为"' + id + '"的数据项?').then(function() {
return deletePolicy(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
//
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有政策动态数据项?').then(() => {
this.exportLoading = true;
return exportPolicyExcel(params);
}).then(response => {
this.$download.excel(response, '政策动态.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

@ -13,12 +13,14 @@ const routerAllowList = [
export function createRouterGuards(router: Router) { export function createRouterGuards(router: Router) {
// 前置 // 前置
router.beforeEach(async (to, from, next) => { router.beforeEach(async (to, from, next) => {
console.log(to);
const Loading = window['$loading']; const Loading = window['$loading'];
Loading && Loading.start(); Loading && Loading.start();
const isErrorPage = router.getRoutes().findIndex((item) => item.name === to.name); const isErrorPage = router.getRoutes().findIndex((item) => item.name === to.name);
if (isErrorPage === -1) { if (isErrorPage === -1) {
next({ name: PageEnum.ERROR_PAGE_NAME_404 }) next({ name: PageEnum.ERROR_PAGE_NAME_404 })
} }
console.log('hhhhhhhi')
// @ts-ignore // @ts-ignore
if (!routerAllowList.includes(to.name) && !loginCheck()) { if (!routerAllowList.includes(to.name) && !loginCheck()) {

Loading…
Cancel
Save