package com.qunzhixinxi.hnqz.admin.controller;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qunzhixinxi.hnqz.admin.entity.input.DeptSubLimitAmountInput;
import com.qunzhixinxi.hnqz.admin.enums.SubjectTypeEnum;
import com.qunzhixinxi.hnqz.common.core.util.R;
import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
import com.qunzhixinxi.hnqz.admin.entity.SysDeptSub;
import com.qunzhixinxi.hnqz.admin.service.SysDeptSubService;
import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;


/**
 * 机构支付渠道管理
 *
 * @author ryz
 * @date 2021-04-19 16:02:30
 */
@RestController
@AllArgsConstructor
@RequestMapping("/sysdeptsub" )
@Api(value = "sysdeptsub", tags = "机构支付渠道管理")
public class SysDeptSubController {

    private final  SysDeptSubService sysDeptSubService;

	/**
	 * 查询结算渠道列表-无参
	 * @return
	 */
	@ApiOperation(value = "查询结算渠道列表-无参", notes = "查询结算渠道列表-无参")
	@GetMapping("/getSubSelect" )
	public R getSubSelect() {
		SysDeptSub sysDeptSub = new SysDeptSub();
		sysDeptSub.setDeptId(SecurityUtils.getUser().getDeptId());
		sysDeptSub.setEnableFlag(SubjectTypeEnum.ENABLE_FLAG_TRUE.getCode());
		List<SysDeptSub> subList = sysDeptSubService.list(Wrappers.query(sysDeptSub));
		return R.ok(subList);
	}

	/**
	 * 查询结算渠道列表-带参
	 * @param sysDeptSub
	 * @return
	 */
	@ApiOperation(value = "查询结算渠道列表-带参", notes = "查询结算渠道列表-带参")
	@GetMapping("/getSubList" )
	public R getSubList(SysDeptSub sysDeptSub) {
		sysDeptSub.setEnableFlag(SubjectTypeEnum.ENABLE_FLAG_TRUE.getCode());
		return R.ok(sysDeptSubService.list(Wrappers.query(sysDeptSub)));
	}

	/**
	 * 修改限额
	 * @param input
	 * @return
	 */
	@ApiOperation(value = "修改限额", notes = "修改限额")
	@PostMapping("/updateSubLimitAmount" )
	public R updateSubLimitAmount(@RequestBody DeptSubLimitAmountInput input) {
		if(CollectionUtils.isEmpty(input.getSubList())){
			return R.failed("参数异常");
		}
		return sysDeptSubService.updateSubLimitAmount(input);
	}


    /**
     * 分页查询
     * @param page 分页对象
     * @param sysDeptSub 部门管理
     * @return
     */
    @ApiOperation(value = "分页查询", notes = "分页查询")
    @GetMapping("/page" )
    @PreAuthorize("@pms.hasPermission('admin_sysdeptsub_view')" )
    public R getSysDeptSubPage(Page page, SysDeptSub sysDeptSub) {
        return R.ok(sysDeptSubService.page(page, Wrappers.query(sysDeptSub)));
    }


    /**
     * 通过id查询部门管理
     * @param deptId id
     * @return R
     */
    @ApiOperation(value = "通过id查询", notes = "通过id查询")
    @GetMapping("/{deptId}" )
    @PreAuthorize("@pms.hasPermission('admin_sysdeptsub_view')" )
    public R getById(@PathVariable("deptId" ) Integer deptId) {
        return R.ok(sysDeptSubService.getById(deptId));
    }

    /**
     * 新增部门管理
     * @param sysDeptSub 部门管理
     * @return R
     */
    @ApiOperation(value = "新增部门管理", notes = "新增部门管理")
    @SysLog("新增部门管理" )
    @PostMapping
    @PreAuthorize("@pms.hasPermission('admin_sysdeptsub_add')" )
    public R save(@RequestBody SysDeptSub sysDeptSub) {
        return R.ok(sysDeptSubService.save(sysDeptSub));
    }

    /**
     * 修改部门管理
     * @param sysDeptSub 部门管理
     * @return R
     */
    @ApiOperation(value = "修改部门管理", notes = "修改部门管理")
    @SysLog("修改部门管理" )
    @PutMapping
    @PreAuthorize("@pms.hasPermission('admin_sysdeptsub_edit')" )
    public R updateById(@RequestBody SysDeptSub sysDeptSub) {
        return R.ok(sysDeptSubService.updateById(sysDeptSub));
    }

    /**
     * 通过id删除部门管理
     * @param deptId id
     * @return R
     */
    @ApiOperation(value = "通过id删除部门管理", notes = "通过id删除部门管理")
    @SysLog("通过id删除部门管理" )
    @DeleteMapping("/{deptId}" )
    @PreAuthorize("@pms.hasPermission('admin_sysdeptsub_del')" )
    public R removeById(@PathVariable Integer deptId) {
        return R.ok(sysDeptSubService.removeById(deptId));
    }

}
