package com.ruoyi.postCheck.controller;

import java.util.*;
import javax.servlet.http.HttpServletResponse;

import com.ruoyi.postCheck.domain.PostCheckedItems;
import com.ruoyi.postCheck.domain.PostListInfo;
import com.ruoyi.postCheck.domain.tools.PostCheckListType;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.postCheck.domain.PostList;
import com.ruoyi.postCheck.service.IPostListService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiImplicitParam;

/**
 * 岗位责任制清单Controller
 *
 * @author csg
 * @date 2023-12-20
 */
@Api(tags = "1.1.1-岗位责任制清单接口")
@RestController
@RequestMapping("/postCheck/postCheckList")
public class PostListController extends BaseController {
    @Autowired
    private IPostListService postListService;

    /**
     * 查询岗位责任制清单列表
     */
    @ApiOperation("查询岗位责任制清单列表")
    @PreAuthorize("@ss.hasPermi('postCheck:postCheckList:list')")
    @GetMapping("/list")
    public TableDataInfo list(PostList postList) {
        startPage();
        List<PostList> list = postListService.selectPostListList(postList);
        return getDataTable(list);
    }

    /**
     * 导出岗位责任制清单列表
     */
    @ApiOperation("导出岗位责任制清单列表")
    @PreAuthorize("@ss.hasPermi('postCheck:postCheckList:export')")
    @Log(title = "岗位责任制清单", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, PostList postList) {
        List<PostList> list = postListService.selectPostListList(postList);
        ExcelUtil<PostList> util = new ExcelUtil<PostList>(PostList.class);
        util.exportExcel(response, list, "岗位责任制清单数据");
    }

    /**
     * 获取岗位责任制清单详细信息
     */
    @ApiOperation("获取岗位责任制清单详细信息")
    @PreAuthorize("@ss.hasPermi('postCheck:postCheckList:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id) {
        return success(postListService.selectPostListById(id));
    }

    /**
     * 新增岗位责任制清单
     */
    @ApiOperation("新增岗位责任制清单")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "主键", dataType = "Long", dataTypeClass = Long.class),
            @ApiImplicitParam(name = "status", value = "状态：1-待审核；2-审核中；3-通过；4-驳回；", dataType = "Long", dataTypeClass = Long.class),
            @ApiImplicitParam(name = "statusByUserId", value = "审核人ID", dataType = "Long", dataTypeClass = Long.class),
            @ApiImplicitParam(name = "statusByUserName", value = "审核人姓名", dataType = "String", dataTypeClass = String.class),
            @ApiImplicitParam(name = "unitId", value = "所在单位", dataType = "String", dataTypeClass = String.class),
            @ApiImplicitParam(name = "postId", value = "岗位ID", dataType = "String", dataTypeClass = String.class),
            @ApiImplicitParam(name = "positionLevel", value = "岗位级别", dataType = "String", dataTypeClass = String.class),
            @ApiImplicitParam(name = "directSuperior", value = "直接上级", dataType = "String", dataTypeClass = String.class),
            @ApiImplicitParam(name = "subordinateCount", value = "辖员人数", dataType = "Integer", dataTypeClass = Integer.class),
            @ApiImplicitParam(name = "deptId", value = "所在部门ID", dataType = "String", dataTypeClass = String.class),
            @ApiImplicitParam(name = "positionCode", value = "岗位编码", dataType = "String", dataTypeClass = String.class),
            @ApiImplicitParam(name = "isConfidential", value = "是否涉密", dataType = "Integer", dataTypeClass = Integer.class),
            @ApiImplicitParam(name = "directSubordinate", value = "直接下级", dataType = "String", dataTypeClass = String.class),
            @ApiImplicitParam(name = "creationDate", value = "编制日期", dataType = "Date", dataTypeClass = Date.class),
            @ApiImplicitParam(name = "revisionDate", value = "修订日期", dataType = "Date", dataTypeClass = Date.class),
            @ApiImplicitParam(name = "jobSummary", value = "工作摘要", dataType = "String", dataTypeClass = String.class),
            @ApiImplicitParam(name = "remark", value = "备注（前端把所在部门的选中数JSON放到这里了，后端不要再所以设置值）", dataType = "String", dataTypeClass = String.class),
            @ApiImplicitParam(name = "createUserId", value = "创建者用户ID", dataType = "Long", dataTypeClass = Long.class),
            /** 岗位责任制清单明细信息 */
            @ApiImplicitParam(name = "children", value = "岗位责任制清单明细", dataType = "PostListInfo", dataTypeClass = PostListInfo.class),
    })
    @PreAuthorize("@ss.hasPermi('postCheck:postCheckList:add')")
    @Log(title = "岗位责任制清单", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody PostList postList) {
        return toAjax(postListService.insertPostList(postList));
    }

    /**
     * 修改岗位责任制清单
     */
    @ApiOperation("修改岗位责任制清单")
    @PreAuthorize("@ss.hasPermi('postCheck:postCheckList:edit')")
    @Log(title = "岗位责任制清单", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody PostList postList) {
        return toAjax(postListService.updatePostList(postList));
    }

    /**
     * 删除岗位责任制清单
     */
    @ApiOperation("删除岗位责任制清单")
    @ApiImplicitParam(name = "ids", value = "Long类型的主键数组", dataType = "Long[]", dataTypeClass = Long[].class)
    @PreAuthorize("@ss.hasPermi('postCheck:postCheckList:remove')")
    @Log(title = "岗位责任制清单", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable Long[] ids) {
        return toAjax(postListService.deletePostListByIds(ids));
    }


    @ApiOperation("1、检查项目下拉框（不需要参数）")
    @GetMapping("/typeList")
    public AjaxResult typeList(PostCheckListType postCheckListType) {
      /*  List<Map<Integer, String>> list = new ArrayList<>();
        Map<Integer, String> map = new HashMap<>();
        map.put(6, "岗位责任制文件完整性与适宜性");
        map.put(5, "任职资格与能力素质要求符合性");
        map.put(1, "业务职责有效性");
        map.put(2, "党建及党风廉政建设职责有效性");
        map.put(3, "安全环保职责有效性");
        map.put(4, "合规与保密职责有效性");
        map.forEach(
                (k, v) -> {
                    Map<Integer, String> data = new HashMap<>();
                    data.put(k, v);
                    list.add(data);
                }
        );*/

        List<PostCheckListType> list = new ArrayList<>();

        Map<Integer, String> map = new HashMap<>();
        PostCheckListType data6 = new PostCheckListType(6, "岗位责任制文件完整性与适宜性");
        PostCheckListType data5 = new PostCheckListType(5, "任职资格与能力素质要求符合性");
        PostCheckListType data1 = new PostCheckListType(1, "业务职责有效性");
        PostCheckListType data2 = new PostCheckListType(2, "党建及党风廉政建设职责有效性");
        PostCheckListType data3 = new PostCheckListType(3, "安全环保职责有效性");
        PostCheckListType data4 = new PostCheckListType(4, "合规与保密职责有效性");
        list.add(data6);
        list.add(data5);
        list.add(data1);
        list.add(data2);
        list.add(data3);
        list.add(data4);
        return success(list);
    }

    /**
     * 检查表生成时，根据“检查项目”查询“检查内容”
     * 岗检表生成页面，根据岗检清单中的“区域划分”（业务职责、党建党风、安全环保……）查询“事项”中最后有值事项（一级事项、……、五级事项）
     * 清单中的区域 = 岗检表的检查“检查项目”
     *
     * @return
     */
    @ApiOperation("2、检查内容：参数是检查项目下拉框")
    @GetMapping("/contentListByType")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "deptId", value = "参数->部门ID", dataType = "Long", dataTypeClass = Long.class),
            @ApiImplicitParam(name = "postId", value = "参数->岗位ID", dataType = "Long", dataTypeClass = Long.class),
            @ApiImplicitParam(name = "type", value = "参数->检查项目（业务职责、党建党风、安全环保……）", dataType = "Integer", dataTypeClass = Integer.class),
            @ApiImplicitParam(name = "postCheckedContent", value = "返回->检查内容", dataType = "String", dataTypeClass = String.class),
            @ApiImplicitParam(name = "postCheckedStandard", value = "返回->检查标准", dataType = "String", dataTypeClass = String.class),
    })
    public AjaxResult contentListByType(Long deptId, Long postId, Integer type) {


        List<PostCheckedItems> itemsList = postListService.contentListByType(deptId, postId, type);

        //写死的假数据
        if (false) {

//            String aa = "";
//            aa.trim()
//        Integer type
//        sequence_project  level_one、level_two、level_three、level_four、level_five
//       work_standard(工作标准)  requirement（要求（2））
            if (type == 6) {
                PostCheckedItems item = new PostCheckedItems();
                item.setType(type); //检查项目 -> 业务职责、党建党风、安全环保……
                item.setPostCheckedContent("完整性->伪代码返回-检查内容"); //检查内容 -> 一级事项、……、五级事项
                item.setPostCheckedStandard("1.是否有岗位基本信息；2.岗位职责是否为全要素；3.是否有明确的任职或上岗条件；4.工作标准是否有定性指标->伪代码返回-检查标准");  //检查标准 ->  工作标准（work_standard）  要求2（requirement）
                itemsList.add(item);

                item = new PostCheckedItems();
                item.setType(type); //检查项目 -> 业务职责、党建党风、安全环保……
                item.setPostCheckedContent("适宜性->伪代码返回-检查内容"); //检查内容 -> 一级事项、……、五级事项
                item.setPostCheckedStandard("1.职责与权限；2.任职或上岗条件；……7.是否对岗位职责落实情况进行检查，检查是否有检查记录。->伪代码返回-检查标准");  //检查标准 ->  工作标准（work_standard）  要求2（requirement）
                itemsList.add(item);
            }
            // 按类型
            else if (type == 5) {
                PostCheckedItems item = new PostCheckedItems();
                item.setType(type); //检查项目 -> 业务职责、党建党风、安全环保……
                item.setPostCheckedContent("政治要求->伪代码返回-检查内容"); //检查内容 -> 一级事项、……、五级事项
                item.setPostCheckedStandard("大学本科->伪代码返回-检查标准");  //检查标准 ->  工作标准（work_standard）  要求2（requirement）
                itemsList.add(item);

                item = new PostCheckedItems();
                item.setType(type); //检查项目 -> 业务职责、党建党风、安全环保……
                item.setPostCheckedContent("最低学历要求->伪代码返回-检查内容"); //检查内容 -> 一级事项、……、五级事项
                item.setPostCheckedStandard("无->伪代码返回-检查标准");  //检查标准 ->  工作标准（work_standard）  要求2（requirement）
                itemsList.add(item);

                item = new PostCheckedItems();
                item.setType(type); //检查项目 -> 业务职责、党建党风、安全环保……
                item.setPostCheckedContent("最低学位要求->伪代码返回-检查内容"); //检查内容 -> 一级事项、……、五级事项
                item.setPostCheckedStandard("1.职责与权限；2.任职或上岗条件；……7.是否对岗位职责落实情况进行检查，检查是否有检查记录。->伪代码返回-检查标准");  //检查标准 ->  工作标准（work_standard）  要求2（requirement）
                itemsList.add(item);


                item = new PostCheckedItems();
                item.setType(type); //检查项目 -> 业务职责、党建党风、安全环保……
                item.setPostCheckedContent("工作经验->伪代码返回-检查内容"); //检查内容 -> 一级事项、……、五级事项
                item.setPostCheckedStandard("岗位工作累计5年以上->伪代码返回-检查标准");  //检查标准 ->  工作标准（work_standard）  要求2（requirement）
                itemsList.add(item);

                item = new PostCheckedItems();
                item.setType(type); //检查项目 -> 业务职责、党建党风、安全环保……
                item.setPostCheckedContent("职称要求->伪代码返回-检查内容"); //检查内容 -> 一级事项、……、五级事项
                item.setPostCheckedStandard("高级职称。->伪代码返回-检查标准");  //检查标准 ->  工作标准（work_standard）  要求2（requirement）
                itemsList.add(item);

                item = new PostCheckedItems();
                item.setType(type); //检查项目 -> 业务职责、党建党风、安全环保……
                item.setPostCheckedContent("专业要求->伪代码返回-检查内容"); //检查内容 -> 一级事项、……、五级事项
                item.setPostCheckedStandard("石油主干专业、企业管理或相关专业。->伪代码返回-检查标准");  //检查标准 ->  工作标准（work_standard）  要求2（requirement）
                itemsList.add(item);
            }
            // 按类型
            else if (type == 1) {
                PostCheckedItems item = new PostCheckedItems();
                item.setType(type); //检查项目 -> 业务职责、党建党风、安全环保……
                item.setPostCheckedContent("党委会、董事会管理->伪代码返回-检查内容"); //检查内容 -> 一级事项、……、五级事项
                item.setPostCheckedStandard("抓好三重一大管理，确保党委会、董事会合规运行->伪代码返回-检查标准");  //检查标准 ->  工作标准（work_standard）  要求2（requirement）
                itemsList.add(item);

                item = new PostCheckedItems();
                item.setType(type); //检查项目 -> 业务职责、党建党风、安全环保……
                item.setPostCheckedContent("保密、信访及维稳管理->伪代码返回-检查内容"); //检查内容 -> 一级事项、……、五级事项
                item.setPostCheckedStandard("按照要求做好保密教育、不发生重大泄密事件；不发生大规模群访闹访事件，限时办结信访事项->伪代码返回-检查标准");  //检查标准 ->  工作标准（work_standard）  要求2（requirement）
                itemsList.add(item);

            }

            // 按类型
            else if (type == 2) {
                PostCheckedItems item = new PostCheckedItems();
                item.setType(type); //检查项目 -> 业务职责、党建党风、安全环保……
                item.setPostCheckedContent("个人廉洁从业情况->伪代码返回-检查内容"); //检查内容 -> 一级事项、……、五级事项
                item.setPostCheckedStandard("检查时间范围内未受到处理处分（诫勉以上）（以公司发文为准）。->伪代码返回-检查标准");  //检查标准 ->  工作标准（work_standard）  要求2（requirement）
                itemsList.add(item);

                item = new PostCheckedItems();
                item.setType(type); //检查项目 -> 业务职责、党建党风、安全环保……
                item.setPostCheckedContent("党风廉政建设和反腐败责任落实情况->伪代码返回-检查内容"); //检查内容 -> 一级事项、……、五级事项
                item.setPostCheckedStandard("1.按要求组织开展部门党风廉政建设宣传月活动;2.推动作风建设情况->伪代码返回-检查标准");  //检查标准 ->  工作标准（work_standard）  要求2（requirement）
                itemsList.add(item);

            }
            // 按类型
            else if (type == 3) {
                PostCheckedItems item = new PostCheckedItems();
                item.setType(type); //检查项目 -> 业务职责、党建党风、安全环保……
                item.setPostCheckedContent("安全会议->伪代码返回-检查内容"); //检查内容 -> 一级事项、……、五级事项
                item.setPostCheckedStandard("按时参加公司安委会、安全生产工作例会，汇报部门相关安全工作。->伪代码返回-检查标准");  //检查标准 ->  工作标准（work_standard）  要求2（requirement）
                itemsList.add(item);

                item = new PostCheckedItems();
                item.setType(type); //检查项目 -> 业务职责、党建党风、安全环保……
                item.setPostCheckedContent("安全工作落实->伪代码返回-检查内容"); //检查内容 -> 一级事项、……、五级事项
                item.setPostCheckedStandard("负责部门安全管理，落实公司领导及相关会议中布置的涉及本部门安全方面的各项工作。->伪代码返回-检查标准");  //检查标准 ->  工作标准（work_standard）  要求2（requirement）
                itemsList.add(item);

                item = new PostCheckedItems();
                item.setType(type); //检查项目 -> 业务职责、党建党风、安全环保……
                item.setPostCheckedContent("环境应急->伪代码返回-检查内容"); //检查内容 -> 一级事项、……、五级事项
                item.setPostCheckedStandard("环境应急xxxxxxxxxxxx->伪代码返回-检查标准");  //检查标准 ->  工作标准（work_standard）  要求2（requirement）
                itemsList.add(item);
            }
            // 按类型
            else if (type == 4) {
                PostCheckedItems item = new PostCheckedItems();
                item.setType(type); //检查项目 -> 业务职责、党建党风、安全环保……
                item.setPostCheckedContent("建立健全本部门业务合规管理制度和流程，开展合规风险识别评估，编制风险清单和应对预案。对本部门保密国安工作负全面领导责任。->伪代码返回-检查内容"); //检查内容 -> 一级事项、……、五级事项
                item.setPostCheckedStandard("1.及时组织本部门员工学习相关法律法规、监管规定、行业规范及公司规章制度，清楚公司各项管理要求、本职工作合规基本义务及违规应承担的责任。\n" +
                        "2.按要求组织开展法律法规、标准和其它要求识别评估，建立健全本部门法律法规等识别评价清单，及时更新完善相关管理制度和流程，及时组织业务管理制度宣贯。\n" +
                        "3.按要求组织开展合规风险识别评估，建立健全本部门合规管理清单。                                        \n" +
                        "4.严格执行党的保密、国家安全工作方针政策以及集团公司党组、炼化公司党委和惠州石化党委工作部署、中海炼化保密“十四五”工作计划、惠州石化年度保密工作要点等要求。->伪代码返回-检查标准");  //检查标准 ->  工作标准（work_standard）  要求2（requirement）
                itemsList.add(item);

                item = new PostCheckedItems();
                item.setType(type); //检查项目 -> 业务职责、党建党风、安全环保……
                item.setPostCheckedContent("定期梳理重点岗位合规风险，将合规要求纳入岗位职责。坚持“业务谁主管，保密国安谁负责”原则，严格落实保密国安工作责任制。->伪代码返回-检查内容"); //检查内容 -> 一级事项、……、五级事项
                item.setPostCheckedStandard("根据业务管理实际，及时更新本部门关键岗位及相关合规风险，纳入岗位责任制清单。严格落实保密国安主体责任。->伪代码返回-检查标准");  //检查标准 ->  工作标准（work_standard）  要求2（requirement）
                itemsList.add(item);

                item = new PostCheckedItems();
                item.setType(type); //检查项目 -> 业务职责、党建党风、安全环保……
                item.setPostCheckedContent("负责本部门经营管理行为的合规审查。加强保密国安人防、物防、技防措施；强化网络保密管理，加强对微博、微信、QQ、钉钉等社交媒体保密管理。->伪代码返回-检查内容"); //检查内容 -> 一级事项、……、五级事项
                item.setPostCheckedStandard("1.及时组织对本领域内制度、文件、合同及经营管理行为等进行合规性审查，审查率100%。\n" +
                        "2.严格落实“三重一大”事项合规审查和审议决策程序，执行率100%。\n" +
                        "3.自觉抵制和纠正上级或其它职能部门违章指挥或违规行为，杜绝对本部门员工和承包商进行违章指挥，及时发现和干预本部门员工和承包商违规行为，做到守法合规。\n" +
                        "4.定期组织检查与考核本部门员工遵章守纪情况。                           \n" +
                        "5.严格执行“涉密不上网、上网不涉密”。->伪代码返回-检查标准");  //检查标准 ->  工作标准（work_standard）  要求2（requirement）
                itemsList.add(item);
            }
        }


        return success(itemsList);
    }
}
