package com.philisense.www.controller.app;

import com.philisense.www.annotation.log.OperateLog;
import com.philisense.www.common.config.CommonConst;
import com.philisense.www.controller.BaseUtilController;
import com.philisense.www.service.ProUserProjectService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

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

@RestController
@RequestMapping(CommonConst.APP_REST_SERVICE_PREFICX + "prouserproject")
@Api(tags = "ProUserProjectControllerForApp |一个用来操作-{项目用户表}-业务模块的控制器")
public class ProUserProjectControllerForApp extends BaseUtilController {

    @Autowired
    private ProUserProjectService proUserProjectService;


    @GetMapping("/delete")
    @ApiOperation(value = "根据-{项目用户表}-主键删除记录", notes = "成功返回:{\"success\":true,\"message\",\"数据删除成功\"},失败返回:{\"success\":false,\"message\",\"数据删除失败\"}")
    @ApiImplicitParam(paramType = "query", name = "recordid", value = "记录主键", required = true,  dataTypeClass = String.class)
    @OperateLog(name = "根据-{项目用户表}-主键删除记录", value = "delete", type = "APP")
    public Map<String, Object> deleteByPrimaryKeyForProUserProjectForApp(HttpServletRequest request, HttpServletResponse response, @RequestParam String recordid) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {
            int flag = proUserProjectService.deleteByPrimaryKey(recordid);
            if (1 == flag) {
                result.put(DATASUCCESS, SUCCESSFLAG);
                result.put(DATAMESSAGE, DELETE_SUCCESS_MSG);
            } else {
                result.put(DATASUCCESS, ERRORFLAG);
                result.put(DATAMESSAGE, DELETE_FAIL_MSG);
            }

        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, DELETE_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @GetMapping("/get")
    @ApiOperation(value = "根据-{项目用户表}-主键查询记录", notes = "成功返回:{\"success\":true,\"message\",\"数据查询成功\",\"datarecord\":\"{}\"},失败返回:{\"success\":false,\"message\",\"数据查询失败\"}")
    @ApiImplicitParam(paramType = "query", name = "recordid", value = "记录主键", required = true,  dataTypeClass = String.class)
    @OperateLog(name = "根据-{项目用户表}-主键查询记录", value = "query", type = "APP")
    public Map<String, Object> selectByPrimaryKeyForProUserProjectForApp(HttpServletRequest request, HttpServletResponse response, @RequestParam String recordid) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {

            result.put(DATASUCCESS, SUCCESSFLAG);
            result.put(DATAMESSAGE, QUERY_SUCCESS_MSG);
            result.put(DATARECORD, proUserProjectService.selectByPrimaryKey(recordid));
        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, QUERY_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/insert")
    @ApiOperation(value = "根据-{项目用户表}-对象插入记录", notes = "成功返回:{\"success\":true,\"message\",\"数据插入成功\"},失败返回:{\"success\":false,\"message\",\"数据插入失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "user_id", value = "用户Id", required = true,  dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "project_id", value = "项目Id", required = true,  dataTypeClass = String.class)
    })
    @OperateLog(name = "根据-{项目用户表}-对象插入记录", value = "insert", type = "APP")
    public Map<String, Object> insertForProUserProjectForApp(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> map) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {
            map.put("id", UUID.randomUUID().toString().replaceAll("-", ""));

            proUserProjectService.insert(map);
            result.put(DATASUCCESS, SUCCESSFLAG);
            result.put(DATAMESSAGE, INSERT_SUCCESS_MSG);
        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, INSERT_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/update")
    @ApiOperation(value = "根据-{项目用户表}-对象更新记录", notes = "成功返回:{\"success\":true,\"message\",\"数据更新成功\"},失败返回:{\"success\":false,\"message\",\"数据更新失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "user_id", value = "用户Id", required = true,  dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "project_id", value = "项目Id", required = true,  dataTypeClass = String.class)
    })
    @OperateLog(name = "根据-{项目用户表}-对象更新记录", value = "update", type = "APP")
    public Map<String, Object> updateForProUserProjectForApp(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> map) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {


            int flag = proUserProjectService.update(map);
            if (1 == flag) {
                result.put(DATASUCCESS, SUCCESSFLAG);
                result.put(DATAMESSAGE, UPDATE_SUCCESS_MSG);
            } else {
                result.put(DATASUCCESS, ERRORFLAG);
                result.put(DATAMESSAGE, UPDATE_FAIL_MSG);
            }

        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, UPDATE_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/deleteByMap")
    @ApiOperation(value = "根据-{项目用户表}-对象Map删除记录", notes = "成功返回:{\"success\":true,\"message\",\"数据删除成功\"},失败返回:{\"success\":false,\"message\",\"数据删除失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "user_id", value = "用户Id", required = true,  dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "project_id", value = "项目Id", required = true,  dataTypeClass = String.class)
    })
    @OperateLog(name = "根据-{项目用户表}-对象Map删除记录", value = "delete", type = "APP")
    public Map<String, Object> deleteByMapForProUserProjectForApp(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> map) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {
            int flag = proUserProjectService.deleteByMap(map);
            if (1 == flag) {
                result.put(DATASUCCESS, SUCCESSFLAG);
                result.put(DATAMESSAGE, DELETE_SUCCESS_MSG);
            } else {
                result.put(DATASUCCESS, ERRORFLAG);
                result.put(DATAMESSAGE, DELETE_FAIL_MSG);
            }

        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, DELETE_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/updateByMap")
    @ApiOperation(value = "根据-{项目用户表}-对象Map更新记录", notes = "成功返回:{\"success\":true,\"message\",\"数据更新成功\"},失败返回:{\"success\":false,\"message\",\"数据更新失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "user_id", value = "用户Id", required = true,  dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "project_id", value = "项目Id", required = true,  dataTypeClass = String.class)
    })
    @OperateLog(name = "根据-{项目用户表}-对象Map更新记录", value = "update", type = "APP")
    public Map<String, Object> updateByMapForProUserProjectForApp(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> map) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {


            int flag = proUserProjectService.updateByMap(map);
            if (1 == flag) {
                result.put(DATASUCCESS, SUCCESSFLAG);
                result.put(DATAMESSAGE, UPDATE_SUCCESS_MSG);
            } else {
                result.put(DATASUCCESS, ERRORFLAG);
                result.put(DATAMESSAGE, UPDATE_FAIL_MSG);
            }

        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, UPDATE_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/getOne")
    @ApiOperation(value = "根据-{项目用户表}-对象Map查询记录", notes = "成功返回:{\"success\":true,\"message\",\"数据查询成功\",\"datarecord\":\"{}\"},失败返回:{\"success\":false,\"message\",\"数据查询失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "user_id", value = "用户Id", required = true,  dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "project_id", value = "项目Id", required = true,  dataTypeClass = String.class)
    })
    @OperateLog(name = "根据-{项目用户表}-对象Map查询记录", value = "query", type = "APP")
    public Map<String, Object> getOneForProUserProjectForApp(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> map) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {

            result.put(DATASUCCESS, SUCCESSFLAG);
            result.put(DATAMESSAGE, QUERY_SUCCESS_MSG);
            result.put(DATARECORD, proUserProjectService.getOne(map));
        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, QUERY_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/getAll")
    @ApiOperation(value = "根据-{项目用户表}-对象Map查询所有记录", notes = "成功返回:{\"success\":true,\"message\",\"数据查询成功\",\"data\":\"[]\"},失败返回:{\"success\":false,\"message\",\"数据查询失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "user_id", value = "用户Id", required = true,  dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "project_id", value = "项目Id", required = true,  dataTypeClass = String.class)
    })
    @OperateLog(name = "根据-{项目用户表}-对象Map查询所有记录", value = "query", type = "APP")
    public Map<String, Object> getAllForProUserProjectForApp(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> map) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {

            result.put(DATASUCCESS, SUCCESSFLAG);
            result.put(DATAMESSAGE, QUERY_SUCCESS_MSG);
            result.put(DATALIST_VUE, proUserProjectService.getAll(map));
        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, QUERY_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/queryPage")
    @ApiOperation(value = "根据-{项目用户表}-对象Map分页记录", notes = "成功返回:{\"success\":true,\"message\",\"数据查询成功\",\"data\":\"[]\"},失败返回:{\"success\":false,\"message\",\"数据查询失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "user_id", value = "用户Id", required = true,  dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "project_id", value = "项目Id", required = true,  dataTypeClass = String.class)
    })
    @OperateLog(name = "根据-{项目用户表}-对象Map分页记录", value = "query", type = "APP")
    public Map<String, Object> queryPageForProUserProjectForApp(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> map) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {

            int currentPage = map.get(DATACURRENT_VUE) != null ? Integer.parseInt(map.get(DATACURRENT_VUE) + "") : 0;
            int pageSize = map.get(PAGESIZE_VUE) != null ? Integer.parseInt(map.get(PAGESIZE_VUE) + "") : 10;
            int pageStart = currentPage * pageSize;

            map.put(PAGESIZE_VUE, pageSize);
            map.put(PAGESTART, pageStart);

            int total = proUserProjectService.count(map);
            List<Map<String, Object>> datalist = new ArrayList<Map<String, Object>>();
            if (total > 0) {
                datalist = proUserProjectService.queryPage(map);
            }
            Map<String, Object> tempresult = new HashMap<String, Object>();
            tempresult.put(DATASUCCESS, SUCCESSFLAG);
            tempresult.put(DATAMESSAGE, QUERY_SUCCESS_MSG);
            tempresult.put(DATALIST_VUE,datalist);
            tempresult.put(DATATOTAL_VUE,total);
            tempresult.put(PAGESIZE_VUE,map.get(PAGESIZE_VUE)!=null?map.get(PAGESIZE_VUE):10);
            tempresult.put(DATACURRENT_VUE,map.get(DATACURRENT_VUE)!=null?map.get(DATACURRENT_VUE):0);
            result.put(DATARESULT, tempresult);
        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, QUERY_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/count")
    @ApiOperation(value = "根据-{项目用户表}-对象Map统计查询总数记录", notes = "成功返回:{\"success\":true,\"message\",\"数据查询成功\",\"data\":\"[]\"},失败返回:{\"success\":false,\"message\",\"数据查询失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "user_id", value = "用户Id", required = true,  dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "project_id", value = "项目Id", required = true,  dataTypeClass = String.class)
    })
    @OperateLog(name = "根据-{项目用户表}-对象Map统计查询总数记录", value = "query", type = "APP")
    public Map<String, Object> countForProUserProjectForApp(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> map) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {

            result.put(DATASUCCESS, SUCCESSFLAG);
            result.put(DATAMESSAGE, QUERY_SUCCESS_MSG);
            result.put(DATATOTAL_VUE, proUserProjectService.count(map));
        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, QUERY_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/insertBatch")
    @ApiOperation(value = "根据-{项目用户表}-对象Map批量插入记录", notes = "成功返回:{\"success\":true,\"message\",\"数据插入成功\"},失败返回:{\"success\":false,\"message\",\"数据插入失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "user_id", value = "用户Id", required = true,  dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "project_id", value = "项目Id", required = true,  dataTypeClass = String.class)
    })
    @OperateLog(name = "根据-{项目用户表}-对象Map批量插入记录", value = "insert", type = "APP")
    public Map<String, Object> insertBatchForProUserProjectForApp(HttpServletRequest request, HttpServletResponse response, @RequestBody List<Map<String, Object>> list) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {

            for (Map<String, Object> map : list) {
                map.put("id", UUID.randomUUID().toString().replaceAll("-", ""));
            }

            proUserProjectService.insertBatch(list);
            result.put(DATASUCCESS, SUCCESSFLAG);
            result.put(DATAMESSAGE, INSERT_SUCCESS_MSG);
        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, INSERT_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/deleteBatch")
    @ApiOperation(value = "根据-{项目用户表}-对象Map批量删除记录", notes = "成功返回:{\"success\":true,\"message\",\"数据删除成功\"},失败返回:{\"success\":false,\"message\",\"数据删除失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "user_id", value = "用户Id", required = true,  dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "project_id", value = "项目Id", required = true,  dataTypeClass = String.class)
    })
    @OperateLog(name = "根据-{项目用户表}-对象Map批量删除记录", value = "delete", type = "APP")
    public Map<String, Object> deleteBatchForProUserProjectForApp(HttpServletRequest request, HttpServletResponse response, @RequestBody List<Map<String, Object>> list) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {
            proUserProjectService.deleteBatch(list);
            result.put(DATASUCCESS, SUCCESSFLAG);
            result.put(DATAMESSAGE, DELETE_SUCCESS_MSG);

        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, DELETE_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/updateBatch")
    @ApiOperation(value = "根据-{项目用户表}-对象Map批量更新记录", notes = "成功返回:{\"success\":true,\"message\",\"数据更新成功\"},失败返回:{\"success\":false,\"message\",\"数据更新失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "user_id", value = "用户Id", required = true,  dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "project_id", value = "项目Id", required = true,  dataTypeClass = String.class)
    })
    @OperateLog(name = "根据-{项目用户表}-对象Map批量更新记录", value = "update", type = "APP")
    public Map<String, Object> updateBatchForProUserProjectForApp(HttpServletRequest request, HttpServletResponse response, @RequestBody List<Map<String, Object>> list) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {


            proUserProjectService.updateBatch(list);
            result.put(DATASUCCESS, SUCCESSFLAG);
            result.put(DATAMESSAGE, UPDATE_SUCCESS_MSG);

        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, UPDATE_FAIL_MSG + e.getMessage());
        }
        return result;
    }

}
