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.ProTablesService;
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+"protables")
        @Api(tags = "ProTablesControllerForApp |一个用来操作-{模型表}-业务模块的控制器")
public class ProTablesControllerForApp extends BaseUtilController{

        @Autowired
private ProTablesService proTablesService;


        @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> deleteByPrimaryKeyForProTablesForApp(HttpServletRequest request , HttpServletResponse response,@RequestParam String recordid)
        {
        Map<String, Object> result = new HashMap<String, Object>();
        try {
        int flag = proTablesService.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> selectByPrimaryKeyForProTablesForApp(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, proTablesService.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 = "id", value = "记录Id", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "name", value = "名称", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "enname", value = "英文名称", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "memo", value = "备注", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "display", value = "是否显示", required = true, dataType = "int", dataTypeClass = int.class)
        })
        @OperateLog(name = "根据-{模型表}-对象插入记录",value = "insert",type = "APP")
public Map<String, Object>  insertForProTablesForApp(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("-", ""));

        proTablesService.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 = "id", value = "记录Id", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "name", value = "名称", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "enname", value = "英文名称", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "memo", value = "备注", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "display", value = "是否显示", required = true, dataType = "int", dataTypeClass = int.class)
        })
        @OperateLog(name = "根据-{模型表}-对象更新记录",value = "update",type = "APP")
public Map<String, Object>  updateForProTablesForApp(HttpServletRequest request , HttpServletResponse response,@RequestBody Map<String, Object> map)
        {
        Map<String, Object> result = new HashMap<String, Object>();
        try {


        int flag = proTablesService.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 = "id", value = "记录Id", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "name", value = "名称", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "enname", value = "英文名称", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "memo", value = "备注", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "display", value = "是否显示", required = true, dataType = "int", dataTypeClass = int.class)
        })
        @OperateLog(name = "根据-{模型表}-对象Map删除记录",value = "delete",type = "APP")
public Map<String, Object>  deleteByMapForProTablesForApp(HttpServletRequest request , HttpServletResponse response,@RequestBody Map<String, Object> map)
        {
        Map<String, Object> result = new HashMap<String, Object>();
        try {
        int flag = proTablesService.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 = "id", value = "记录Id", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "name", value = "名称", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "enname", value = "英文名称", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "memo", value = "备注", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "display", value = "是否显示", required = true, dataType = "int", dataTypeClass = int.class)
        })
        @OperateLog(name = "根据-{模型表}-对象Map更新记录",value = "update",type = "APP")
public Map<String, Object>  updateByMapForProTablesForApp(HttpServletRequest request , HttpServletResponse response,@RequestBody Map<String, Object> map)
        {
        Map<String, Object> result = new HashMap<String, Object>();
        try {


        int flag = proTablesService.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 = "id", value = "记录Id", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "name", value = "名称", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "enname", value = "英文名称", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "memo", value = "备注", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "display", value = "是否显示", required = true, dataType = "int", dataTypeClass = int.class)
        })
        @OperateLog(name = "根据-{模型表}-对象Map查询记录",value = "query",type = "APP")
public Map<String, Object>  getOneForProTablesForApp(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, proTablesService.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 = "id", value = "记录Id", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "name", value = "名称", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "enname", value = "英文名称", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "memo", value = "备注", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "display", value = "是否显示", required = true, dataType = "int", dataTypeClass = int.class)
        })
        @OperateLog(name = "根据-{模型表}-对象Map查询所有记录",value = "query",type = "APP")
public Map<String, Object>  getAllForProTablesForApp(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, proTablesService.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 = "id", value = "记录Id", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "name", value = "名称", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "enname", value = "英文名称", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "memo", value = "备注", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "display", value = "是否显示", required = true, dataType = "int", dataTypeClass = int.class)
        })
        @OperateLog(name = "根据-{模型表}-对象Map分页记录",value = "query",type = "APP")
public Map<String, Object>  queryPageForProTablesForApp(HttpServletRequest request , HttpServletResponse response,@RequestBody Map<String, Object> map)
        {
        Map<String, Object> result = new HashMap<String, Object>();
        try {

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

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

        int total = proTablesService.count(map);
        List<Map<String, Object>> datalist = new ArrayList<Map<String, Object>>();
        if(total>0){
        datalist = proTablesService.queryPage(map);
        }
        result.put(DATASUCCESS, SUCCESSFLAG);
        result.put(DATAMESSAGE, QUERY_SUCCESS_MSG);
        result.put(DATALIST,datalist);
        Map<String, Object> pagemode = new HashMap<String, Object>();
        pagemode.put(DATATOTAL,total);
        pagemode.put(PAGESIZE,map.get(PAGESIZE)!=null?map.get(PAGESIZE):10);
        pagemode.put(DATACURRENT,map.get(DATACURRENT)!=null?map.get(DATACURRENT):0);
        result.put(PAGINATION,pagemode);
        }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 = "id", value = "记录Id", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "name", value = "名称", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "enname", value = "英文名称", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "memo", value = "备注", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "display", value = "是否显示", required = true, dataType = "int", dataTypeClass = int.class)
        })
        @OperateLog(name = "根据-{模型表}-对象Map统计查询总数记录",value = "query",type = "APP")
public Map<String, Object>  countForProTablesForApp(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, proTablesService.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 = "id", value = "记录Id", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "name", value = "名称", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "enname", value = "英文名称", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "memo", value = "备注", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "display", value = "是否显示", required = true, dataType = "int", dataTypeClass = int.class)
        })
        @OperateLog(name = "根据-{模型表}-对象Map批量插入记录",value = "insert",type = "APP")
public Map<String, Object>  insertBatchForProTablesForApp(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("-", ""));
        }

        proTablesService.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 = "id", value = "记录Id", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "name", value = "名称", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "enname", value = "英文名称", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "memo", value = "备注", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "display", value = "是否显示", required = true, dataType = "int", dataTypeClass = int.class)
        })
        @OperateLog(name = "根据-{模型表}-对象Map批量删除记录",value = "delete",type = "APP")
public Map<String, Object>  deleteBatchForProTablesForApp(HttpServletRequest request , HttpServletResponse response,@RequestBody List<Map<String, Object>> list)
        {
        Map<String, Object> result = new HashMap<String, Object>();
        try {
        proTablesService.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 = "id", value = "记录Id", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "name", value = "名称", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "enname", value = "英文名称", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "memo", value = "备注", required = true,  dataTypeClass = String.class),
        @ApiImplicitParam(paramType="body", name = "display", value = "是否显示", required = true, dataType = "int", dataTypeClass = int.class)
        })
        @OperateLog(name = "根据-{模型表}-对象Map批量更新记录",value = "update",type = "APP")
public Map<String, Object>  updateBatchForProTablesForApp(HttpServletRequest request , HttpServletResponse response,@RequestBody List<Map<String, Object>> list)
        {
        Map<String, Object> result = new HashMap<String, Object>();
        try {


        proTablesService.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;
        }

        }
