# SvaPayCodeExcludeConfigController.java

    package cloud.wconnect.workperformance.controller.sva.avhours;

    import cloud.wconnect.commonlib.annotation.ApiId;
    import cloud.wconnect.commonlib.component.SessionContext;
    import cloud.wconnect.commonlib.pojo.dto.ListPagedDTO;
    import cloud.wconnect.workperformance.entity.sva.avhours.SvaPayCodeExcludeConfig;
    import cloud.wconnect.workperformance.pojo.dto.sva.avhours.SvaPayCodeExcludeConfigDTO;
    import cloud.wconnect.workperformance.pojo.query.sva.avhours.SvaPayCodeExcludeConfigQuery;
    import cloud.wconnect.workperformance.service.sva.actualschedulehour.ISvaPayCodeExcludeConfigService;
    import com.google.common.collect.ImmutableMap;
    import org.springframework.web.bind.annotation.*;

    import jakarta.annotation.Resource;
    import jakarta.validation.Valid;

    import java.util.Collections;
    import java.util.Map;
    import java.util.Objects;

    /**
     * <p>
     * sva 排除 Pay Code配置 前端控制器
     * </p>
     *
     * @author zc
     * @since 2025-02-06
     */
    @RestController
    @RequestMapping("/sva/av/pay-code/exclude-config")
    public class SvaPayCodeExcludeConfigController {
        @Resource
        private ISvaPayCodeExcludeConfigService configService;
        @Resource
        private SessionContext sessionContext;

        /**
         * 获取配置
         *
         * @param property 资产标识
         * @param query    查询条件
         * @return 配置集合
         * @author zc
         * @date 2025/2/6
         */
        @ApiId(1336)
        @GetMapping
        public ListPagedDTO<SvaPayCodeExcludeConfigDTO> list(@RequestParam String property, SvaPayCodeExcludeConfigQuery query) {
            int propertyId = sessionContext.getPropertyId(property);
            return configService.list(propertyId, query);
        }

        /**
         * 保存配置
         *
         * @param property  资产标识
         * @param configDTO 配置信息
         * @return 配置 id
         * @author zc
         * @date 2025/2/6
         */
        @ApiId(1337)
        @PostMapping
        public Map<String, Integer> save(@RequestParam String property, @RequestBody @Valid SvaPayCodeExcludeConfigDTO configDTO) {
            int propertyId = sessionContext.getPropertyId(property);

            if (Objects.isNull(configDTO.getId())) {
                // 校验配置信息是否重复
                configService.checkRepeat(propertyId, null, configDTO.getPayCode());
                // 新增配置
                return ImmutableMap.of("id", configService.add(propertyId, configDTO.getPayCode(), sessionContext.getLoginUserId()));
            }
            // 校验配置是否存在
            SvaPayCodeExcludeConfig originConfig = configService.checkExist(configDTO.getId());
            // 校验归属
            configService.checkBelong(propertyId, originConfig);
            // 校验配置信息是否重复
            configService.checkRepeat(propertyId, configDTO.getId(), configDTO.getPayCode());
            // 编辑配置
            configService.update(configDTO.getId(), configDTO.getPayCode(), sessionContext.getLoginUserId());
            return ImmutableMap.of("id", configDTO.getId());
        }

        /**
         * 删除配置
         *
         * @param property 资产标识
         * @param id       配置 id
         * @return empty map
         * @author zc
         * @date 2025/2/6
         */
        @ApiId(1338)
        @DeleteMapping("/{id:\\d+}")
        public Map<Object, Object> delete(@RequestParam String property, @PathVariable int id) {
            int propertyId = sessionContext.getPropertyId(property);

            // 校验配置是否存在
            SvaPayCodeExcludeConfig originConfig = configService.checkExist(id);
            // 校验归属
            configService.checkBelong(propertyId, originConfig);
            // 删除配置
            configService.removeById(id);

            return Collections.emptyMap();
        }
    }