package cn.ibizlab.api.rest; import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.math.BigInteger; import java.util.HashMap; import lombok.extern.slf4j.Slf4j; import com.alibaba.fastjson.JSONObject; import javax.servlet.ServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cglib.beans.BeanCopier; import org.springframework.transaction.annotation.Transactional; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.http.HttpStatus; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.util.StringUtils; import org.springframework.context.annotation.Lazy; import org.springframework.security.access.prepost.PreAuthorize; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import cn.ibizlab.api.dto.*; import cn.ibizlab.api.mapping.*; import cn.ibizlab.core.workflow.domain.WFProcessDefinition; import cn.ibizlab.core.workflow.service.IWFProcessDefinitionService; import cn.ibizlab.core.workflow.filter.WFProcessDefinitionSearchContext; @Slf4j @Api(tags = {"WFProcessDefinition" }) @RestController("api-wfprocessdefinition") @RequestMapping("") public class WFProcessDefinitionResource { @Autowired private IWFProcessDefinitionService wfprocessdefinitionService; @Autowired @Lazy private WFProcessDefinitionMapping wfprocessdefinitionMapping; @ApiOperation(value = "Save", tags = {"WFProcessDefinition" }, notes = "Save") @RequestMapping(method = RequestMethod.POST, value = "/wfprocessdefinitions/save") public ResponseEntity<Boolean> save(@RequestBody WFProcessDefinitionDTO wfprocessdefinitiondto) { return ResponseEntity.status(HttpStatus.OK).body(wfprocessdefinitionService.save(wfprocessdefinitionMapping.toDomain(wfprocessdefinitiondto))); } @ApiOperation(value = "SaveBatch", tags = {"SaveBatch" }, notes = "SaveBatch") @RequestMapping(method = RequestMethod.POST, value = "/wfprocessdefinitions/savebatch") public ResponseEntity<Boolean> saveBatch(@RequestBody List<WFProcessDefinitionDTO> wfprocessdefinitiondtos) { wfprocessdefinitionService.saveBatch(wfprocessdefinitionMapping.toDomain(wfprocessdefinitiondtos)); return ResponseEntity.status(HttpStatus.OK).body(true); } @PreAuthorize("hasPermission(#wfprocessdefinition_id,'Update',{this.getEntity(),'Sql'})") @ApiOperation(value = "Update", tags = {"WFProcessDefinition" }, notes = "Update") @RequestMapping(method = RequestMethod.PUT, value = "/wfprocessdefinitions/{wfprocessdefinition_id}") @Transactional public ResponseEntity<WFProcessDefinitionDTO> update(@PathVariable("wfprocessdefinition_id") String wfprocessdefinition_id, @RequestBody WFProcessDefinitionDTO wfprocessdefinitiondto) { WFProcessDefinition domain = wfprocessdefinitionMapping.toDomain(wfprocessdefinitiondto); domain.setDefinitionkey(wfprocessdefinition_id); wfprocessdefinitionService.update(domain); WFProcessDefinitionDTO dto = wfprocessdefinitionMapping.toDto(domain); return ResponseEntity.status(HttpStatus.OK).body(dto); } @PreAuthorize("hasPermission(#wfprocessdefinition_id,'Update',{this.getEntity(),'Sql'})") @ApiOperation(value = "UpdateBatch", tags = {"UpdateBatch" }, notes = "UpdateBatch") @RequestMapping(method = RequestMethod.POST, value = "/wfprocessdefinitions/updatebatch") public ResponseEntity<Boolean> updateBatch(@RequestBody List<WFProcessDefinitionDTO> wfprocessdefinitiondtos) { wfprocessdefinitionService.updateBatch(wfprocessdefinitionMapping.toDomain(wfprocessdefinitiondtos)); return ResponseEntity.status(HttpStatus.OK).body(true); } @PreAuthorize("hasPermission(#wfprocessdefinition_id,'Get',{this.getEntity(),'Sql'})") @ApiOperation(value = "Get", tags = {"WFProcessDefinition" }, notes = "Get") @RequestMapping(method = RequestMethod.GET, value = "/wfprocessdefinitions/{wfprocessdefinition_id}") public ResponseEntity<WFProcessDefinitionDTO> get(@PathVariable("wfprocessdefinition_id") String wfprocessdefinition_id) { WFProcessDefinition domain = wfprocessdefinitionService.get(wfprocessdefinition_id); WFProcessDefinitionDTO dto = wfprocessdefinitionMapping.toDto(domain); return ResponseEntity.status(HttpStatus.OK).body(dto); } @ApiOperation(value = "CheckKey", tags = {"WFProcessDefinition" }, notes = "CheckKey") @RequestMapping(method = RequestMethod.POST, value = "/wfprocessdefinitions/checkkey") public ResponseEntity<Boolean> checkKey(@RequestBody WFProcessDefinitionDTO wfprocessdefinitiondto) { return ResponseEntity.status(HttpStatus.OK).body(wfprocessdefinitionService.checkKey(wfprocessdefinitionMapping.toDomain(wfprocessdefinitiondto))); } @ApiOperation(value = "GetDraft", tags = {"WFProcessDefinition" }, notes = "GetDraft") @RequestMapping(method = RequestMethod.GET, value = "/wfprocessdefinitions/getdraft") public ResponseEntity<WFProcessDefinitionDTO> getDraft() { return ResponseEntity.status(HttpStatus.OK).body(wfprocessdefinitionMapping.toDto(wfprocessdefinitionService.getDraft(new WFProcessDefinition()))); } @PreAuthorize("hasPermission('','Create',{this.getEntity(),'Sql'})") @ApiOperation(value = "Create", tags = {"WFProcessDefinition" }, notes = "Create") @RequestMapping(method = RequestMethod.POST, value = "/wfprocessdefinitions") @Transactional public ResponseEntity<WFProcessDefinitionDTO> create(@RequestBody WFProcessDefinitionDTO wfprocessdefinitiondto) { WFProcessDefinition domain = wfprocessdefinitionMapping.toDomain(wfprocessdefinitiondto); wfprocessdefinitionService.create(domain); WFProcessDefinitionDTO dto = wfprocessdefinitionMapping.toDto(domain); return ResponseEntity.status(HttpStatus.OK).body(dto); } @PreAuthorize("hasPermission('','Create',{this.getEntity(),'Sql'})") @ApiOperation(value = "createBatch", tags = {"createBatch" }, notes = "createBatch") @RequestMapping(method = RequestMethod.POST, value = "/wfprocessdefinitions/createbatch") public ResponseEntity<Boolean> createBatch(@RequestBody List<WFProcessDefinitionDTO> wfprocessdefinitiondtos) { wfprocessdefinitionService.createBatch(wfprocessdefinitionMapping.toDomain(wfprocessdefinitiondtos)); return ResponseEntity.status(HttpStatus.OK).body(true); } @PreAuthorize("hasPermission('Remove',{#wfprocessdefinition_id,{this.getEntity(),'Sql'}})") @ApiOperation(value = "Remove", tags = {"WFProcessDefinition" }, notes = "Remove") @RequestMapping(method = RequestMethod.DELETE, value = "/wfprocessdefinitions/{wfprocessdefinition_id}") @Transactional public ResponseEntity<Boolean> remove(@PathVariable("wfprocessdefinition_id") String wfprocessdefinition_id) { return ResponseEntity.status(HttpStatus.OK).body(wfprocessdefinitionService.remove(wfprocessdefinition_id)); } @ApiOperation(value = "RemoveBatch", tags = {"RemoveBatch" }, notes = "RemoveBatch") @RequestMapping(method = RequestMethod.POST, value = "/wfprocessdefinitions/removebatch") public ResponseEntity<Boolean> removeBatch(@RequestBody List<String> ids) { wfprocessdefinitionService.removeBatch(ids); return ResponseEntity.status(HttpStatus.OK).body(true); } @PreAuthorize("hasPermission('Get',{#context,'Default',this.getEntity(),'Sql'})") @ApiOperation(value = "fetchDEFAULT", tags = {"WFProcessDefinition" } ,notes = "fetchDEFAULT") @RequestMapping(method= RequestMethod.GET , value="/wfprocessdefinitions/fetchdefault") public ResponseEntity<List<WFProcessDefinitionDTO>> fetchDefault(WFProcessDefinitionSearchContext context) { Page<WFProcessDefinition> domains = wfprocessdefinitionService.searchDefault(context) ; List<WFProcessDefinitionDTO> list = wfprocessdefinitionMapping.toDto(domains.getContent()); return ResponseEntity.status(HttpStatus.OK) .header("x-page", String.valueOf(context.getPageable().getPageNumber())) .header("x-per-page", String.valueOf(context.getPageable().getPageSize())) .header("x-total", String.valueOf(domains.getTotalElements())) .body(list); } @PreAuthorize("hasPermission('Get',{#context,'Default',this.getEntity(),'Sql'})") @ApiOperation(value = "searchDEFAULT", tags = {"WFProcessDefinition" } ,notes = "searchDEFAULT") @RequestMapping(method= RequestMethod.GET , value="/wfprocessdefinitions/searchdefault") public ResponseEntity<Page<WFProcessDefinitionDTO>> searchDefault(WFProcessDefinitionSearchContext context) { Page<WFProcessDefinition> domains = wfprocessdefinitionService.searchDefault(context) ; return ResponseEntity.status(HttpStatus.OK) .body(new PageImpl(wfprocessdefinitionMapping.toDto(domains.getContent()), context.getPageable(), domains.getTotalElements())); } /** * 用户权限校验 * @return */ public WFProcessDefinition getEntity(){ return new WFProcessDefinition(); } }