diff --git a/blade-ops/blade-develop/src/main/resources/templates/controller.java.vm b/blade-ops/blade-develop/src/main/resources/templates/controller.java.vm
new file mode 100644
index 00000000..95ba8684
--- /dev/null
+++ b/blade-ops/blade-develop/src/main/resources/templates/controller.java.vm
@@ -0,0 +1,154 @@
+/**
+ * Copyright (c) 2018-2028, Chill Zhuang 庄骞 (smallchill@163.com).
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package $!{package.Controller};
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiOperationSupport;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import javax.validation.Valid;
+
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+#if($!{superEntityClass})
+import org.springframework.web.bind.annotation.RequestParam;
+#end
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import $!{package.Entity}.$!{entity};
+#set($voPackage=$package.Entity.replace("entity","vo"))
+import $!{voPackage}.$!{entity}VO;
+#set($wrapperPackage=$package.Entity.replace("entity","wrapper"))
+import $!{wrapperPackage}.$!{entity}Wrapper;
+import $!{package.Service}.$!{table.serviceName};
+#if($!{superControllerClassPackage})
+import $!{superControllerClassPackage};
+#end
+#if(!$!{superEntityClass})
+#end
+import java.util.List;
+
+/**
+ * $!{table.comment} 控制器
+ *
+ * @author $!{author}
+ * @since $!{date}
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("#if($!{package.ModuleName})/$!{package.ModuleName}#end/$!{cfg.entityKey}")
+@Api(value = "$!{table.comment}", tags = "$!{table.comment}接口")
+#if($!{superControllerClass})
+public class $!{table.controllerName} extends $!{superControllerClass} {
+#else
+public class $!{table.controllerName} {
+#end
+
+ private $!{table.serviceName} $!{table.entityPath}Service;
+
+ /**
+ * 详情
+ */
+ @GetMapping("/detail")
+ @ApiOperationSupport(order = 1)
+ @ApiOperation(value = "详情", notes = "传入$!{table.entityPath}")
+ public R<$!{entity}VO> detail($!{entity} $!{table.entityPath}) {
+ $!{entity} detail = $!{table.entityPath}Service.getOne(Condition.getQueryWrapper($!{table.entityPath}));
+ return R.data($!{entity}Wrapper.build().entityVO(detail));
+ }
+
+ /**
+ * 分页 $!{table.comment}
+ */
+ @GetMapping("/list")
+ @ApiOperationSupport(order = 2)
+ @ApiOperation(value = "分页", notes = "传入$!{table.entityPath}")
+ public R> list($!{entity} $!{table.entityPath}, Query query) {
+ IPage<$!{entity}> pages = $!{table.entityPath}Service.page(Condition.getPage(query), Condition.getQueryWrapper($!{table.entityPath}));
+ return R.data($!{entity}Wrapper.build().pageVO(pages));
+ }
+
+ /**
+ * 自定义分页 $!{table.comment}
+ */
+ @GetMapping("/page")
+ @ApiOperationSupport(order = 3)
+ @ApiOperation(value = "分页", notes = "传入$!{table.entityPath}")
+ public R> page($!{entity}VO $!{table.entityPath}, Query query) {
+ IPage<$!{entity}VO> pages = $!{table.entityPath}Service.select$!{entity}Page(Condition.getPage(query), $!{table.entityPath});
+ return R.data(pages);
+ }
+
+ /**
+ * 新增 $!{table.comment}
+ */
+ @PostMapping("/save")
+ @ApiOperationSupport(order = 4)
+ @ApiOperation(value = "新增", notes = "传入$!{table.entityPath}")
+ public R save(@Valid @RequestBody $!{entity} $!{table.entityPath}) {
+ return R.status($!{table.entityPath}Service.save($!{table.entityPath}));
+ }
+
+ /**
+ * 修改 $!{table.comment}
+ */
+ @PostMapping("/update")
+ @ApiOperationSupport(order = 5)
+ @ApiOperation(value = "修改", notes = "传入$!{table.entityPath}")
+ public R update(@Valid @RequestBody $!{entity} $!{table.entityPath}) {
+ return R.status($!{table.entityPath}Service.updateById($!{table.entityPath}));
+ }
+
+ /**
+ * 新增或修改 $!{table.comment}
+ */
+ @PostMapping("/submit")
+ @ApiOperationSupport(order = 6)
+ @ApiOperation(value = "新增或修改", notes = "传入$!{table.entityPath}")
+ public R submit(@Valid @RequestBody $!{entity} $!{table.entityPath}) {
+ return R.status($!{table.entityPath}Service.saveOrUpdate($!{table.entityPath}));
+ }
+
+ #if($!{superEntityClass})
+
+ /**
+ * 删除 $!{table.comment}
+ */
+ @PostMapping("/remove")
+ @ApiOperationSupport(order = 7)
+ @ApiOperation(value = "逻辑删除", notes = "传入ids")
+ public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+ return R.status($!{table.entityPath}Service.deleteLogic(Func.toIntList(ids)));
+ }
+
+ #else
+
+ /**
+ * 删除 $!{table.comment}
+ */
+ @PostMapping("/remove")
+ @ApiOperationSupport(order = 7)
+ @ApiOperation(value = "删除", notes = "传入ids")
+ public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+ return R.status($!{table.entityPath}Service.removeByIds(Func.toIntList(ids)));
+ }
+
+ #end
+
+}
diff --git a/blade-ops/blade-develop/src/main/resources/templates/wrapper.java.vm b/blade-ops/blade-develop/src/main/resources/templates/wrapper.java.vm
new file mode 100644
index 00000000..64a8b015
--- /dev/null
+++ b/blade-ops/blade-develop/src/main/resources/templates/wrapper.java.vm
@@ -0,0 +1,45 @@
+/**
+ * Copyright (c) 2018-2028, Chill Zhuang 庄骞 (smallchill@163.com).
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#set($wrapperPackage=$package.Entity.replace("entity","wrapper"))
+package $!{wrapperPackage};
+
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import $!{package.Entity}.$!{entity};
+#set($voPackage=$package.Entity.replace("entity","vo"))
+import $!{voPackage}.$!{entity}VO;
+
+/**
+ * $!{table.comment}包装类,返回视图层所需的字段
+ *
+ * @author $!{author}
+ * @since $!{date}
+ */
+public class $!{entity}Wrapper extends BaseEntityWrapper<$!{entity}, $!{entity}VO> {
+
+ public static $!{entity}Wrapper build() {
+ return new $!{entity}Wrapper();
+ }
+
+ @Override
+ public $!{entity}VO entityVO($!{entity} $!{table.entityPath}) {
+ $!{entity}VO $!{table.entityPath}VO = BeanUtil.copy($!{table.entityPath}, $!{entity}VO.class);
+
+ return $!{table.entityPath}VO;
+ }
+
+}
diff --git a/blade-ops/blade-develop/src/test/resources/templates/controller.java.vm b/blade-ops/blade-develop/src/test/resources/templates/controller.java.vm
new file mode 100644
index 00000000..95ba8684
--- /dev/null
+++ b/blade-ops/blade-develop/src/test/resources/templates/controller.java.vm
@@ -0,0 +1,154 @@
+/**
+ * Copyright (c) 2018-2028, Chill Zhuang 庄骞 (smallchill@163.com).
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package $!{package.Controller};
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiOperationSupport;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import javax.validation.Valid;
+
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+#if($!{superEntityClass})
+import org.springframework.web.bind.annotation.RequestParam;
+#end
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import $!{package.Entity}.$!{entity};
+#set($voPackage=$package.Entity.replace("entity","vo"))
+import $!{voPackage}.$!{entity}VO;
+#set($wrapperPackage=$package.Entity.replace("entity","wrapper"))
+import $!{wrapperPackage}.$!{entity}Wrapper;
+import $!{package.Service}.$!{table.serviceName};
+#if($!{superControllerClassPackage})
+import $!{superControllerClassPackage};
+#end
+#if(!$!{superEntityClass})
+#end
+import java.util.List;
+
+/**
+ * $!{table.comment} 控制器
+ *
+ * @author $!{author}
+ * @since $!{date}
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("#if($!{package.ModuleName})/$!{package.ModuleName}#end/$!{cfg.entityKey}")
+@Api(value = "$!{table.comment}", tags = "$!{table.comment}接口")
+#if($!{superControllerClass})
+public class $!{table.controllerName} extends $!{superControllerClass} {
+#else
+public class $!{table.controllerName} {
+#end
+
+ private $!{table.serviceName} $!{table.entityPath}Service;
+
+ /**
+ * 详情
+ */
+ @GetMapping("/detail")
+ @ApiOperationSupport(order = 1)
+ @ApiOperation(value = "详情", notes = "传入$!{table.entityPath}")
+ public R<$!{entity}VO> detail($!{entity} $!{table.entityPath}) {
+ $!{entity} detail = $!{table.entityPath}Service.getOne(Condition.getQueryWrapper($!{table.entityPath}));
+ return R.data($!{entity}Wrapper.build().entityVO(detail));
+ }
+
+ /**
+ * 分页 $!{table.comment}
+ */
+ @GetMapping("/list")
+ @ApiOperationSupport(order = 2)
+ @ApiOperation(value = "分页", notes = "传入$!{table.entityPath}")
+ public R> list($!{entity} $!{table.entityPath}, Query query) {
+ IPage<$!{entity}> pages = $!{table.entityPath}Service.page(Condition.getPage(query), Condition.getQueryWrapper($!{table.entityPath}));
+ return R.data($!{entity}Wrapper.build().pageVO(pages));
+ }
+
+ /**
+ * 自定义分页 $!{table.comment}
+ */
+ @GetMapping("/page")
+ @ApiOperationSupport(order = 3)
+ @ApiOperation(value = "分页", notes = "传入$!{table.entityPath}")
+ public R> page($!{entity}VO $!{table.entityPath}, Query query) {
+ IPage<$!{entity}VO> pages = $!{table.entityPath}Service.select$!{entity}Page(Condition.getPage(query), $!{table.entityPath});
+ return R.data(pages);
+ }
+
+ /**
+ * 新增 $!{table.comment}
+ */
+ @PostMapping("/save")
+ @ApiOperationSupport(order = 4)
+ @ApiOperation(value = "新增", notes = "传入$!{table.entityPath}")
+ public R save(@Valid @RequestBody $!{entity} $!{table.entityPath}) {
+ return R.status($!{table.entityPath}Service.save($!{table.entityPath}));
+ }
+
+ /**
+ * 修改 $!{table.comment}
+ */
+ @PostMapping("/update")
+ @ApiOperationSupport(order = 5)
+ @ApiOperation(value = "修改", notes = "传入$!{table.entityPath}")
+ public R update(@Valid @RequestBody $!{entity} $!{table.entityPath}) {
+ return R.status($!{table.entityPath}Service.updateById($!{table.entityPath}));
+ }
+
+ /**
+ * 新增或修改 $!{table.comment}
+ */
+ @PostMapping("/submit")
+ @ApiOperationSupport(order = 6)
+ @ApiOperation(value = "新增或修改", notes = "传入$!{table.entityPath}")
+ public R submit(@Valid @RequestBody $!{entity} $!{table.entityPath}) {
+ return R.status($!{table.entityPath}Service.saveOrUpdate($!{table.entityPath}));
+ }
+
+ #if($!{superEntityClass})
+
+ /**
+ * 删除 $!{table.comment}
+ */
+ @PostMapping("/remove")
+ @ApiOperationSupport(order = 7)
+ @ApiOperation(value = "逻辑删除", notes = "传入ids")
+ public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+ return R.status($!{table.entityPath}Service.deleteLogic(Func.toIntList(ids)));
+ }
+
+ #else
+
+ /**
+ * 删除 $!{table.comment}
+ */
+ @PostMapping("/remove")
+ @ApiOperationSupport(order = 7)
+ @ApiOperation(value = "删除", notes = "传入ids")
+ public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+ return R.status($!{table.entityPath}Service.removeByIds(Func.toIntList(ids)));
+ }
+
+ #end
+
+}
diff --git a/blade-ops/blade-develop/src/test/resources/templates/wrapper.java.vm b/blade-ops/blade-develop/src/test/resources/templates/wrapper.java.vm
new file mode 100644
index 00000000..64a8b015
--- /dev/null
+++ b/blade-ops/blade-develop/src/test/resources/templates/wrapper.java.vm
@@ -0,0 +1,45 @@
+/**
+ * Copyright (c) 2018-2028, Chill Zhuang 庄骞 (smallchill@163.com).
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#set($wrapperPackage=$package.Entity.replace("entity","wrapper"))
+package $!{wrapperPackage};
+
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import $!{package.Entity}.$!{entity};
+#set($voPackage=$package.Entity.replace("entity","vo"))
+import $!{voPackage}.$!{entity}VO;
+
+/**
+ * $!{table.comment}包装类,返回视图层所需的字段
+ *
+ * @author $!{author}
+ * @since $!{date}
+ */
+public class $!{entity}Wrapper extends BaseEntityWrapper<$!{entity}, $!{entity}VO> {
+
+ public static $!{entity}Wrapper build() {
+ return new $!{entity}Wrapper();
+ }
+
+ @Override
+ public $!{entity}VO entityVO($!{entity} $!{table.entityPath}) {
+ $!{entity}VO $!{table.entityPath}VO = BeanUtil.copy($!{table.entityPath}, $!{entity}VO.class);
+
+ return $!{table.entityPath}VO;
+ }
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/controller/NoticeController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/controller/NoticeController.java
index d126e83f..a4c8d645 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/controller/NoticeController.java
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/controller/NoticeController.java
@@ -58,7 +58,7 @@ public class NoticeController extends BladeController implements CacheNames {
@ApiOperation(value = "详情", notes = "传入notice")
public R detail(Notice notice) {
Notice detail = noticeService.getOne(Condition.getQueryWrapper(notice));
- return R.data(NoticeWrapper.init().entityVO(detail));
+ return R.data(NoticeWrapper.build().entityVO(detail));
}
/**
@@ -73,7 +73,7 @@ public class NoticeController extends BladeController implements CacheNames {
@ApiOperation(value = "分页", notes = "传入notice")
public R> list(@ApiIgnore @RequestParam Map notice, Query query) {
IPage pages = noticeService.page(Condition.getPage(query), Condition.getQueryWrapper(notice, Notice.class));
- return R.data(NoticeWrapper.init().pageVO(pages));
+ return R.data(NoticeWrapper.build().pageVO(pages));
}
/**
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/wrapper/NoticeWrapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/wrapper/NoticeWrapper.java
index a155604e..70fe7f7c 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/wrapper/NoticeWrapper.java
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/wrapper/NoticeWrapper.java
@@ -36,7 +36,7 @@ public class NoticeWrapper extends BaseEntityWrapper {
dictClient = SpringUtil.getBean(IDictClient.class);
}
- public static NoticeWrapper init() {
+ public static NoticeWrapper build() {
return new NoticeWrapper();
}
diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/DeptController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/DeptController.java
index 6b0f3a74..6df84364 100644
--- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/DeptController.java
+++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/DeptController.java
@@ -57,7 +57,7 @@ public class DeptController extends BladeController {
@ApiOperation(value = "详情", notes = "传入dept")
public R detail(Dept dept) {
Dept detail = deptService.getOne(Condition.getQueryWrapper(dept));
- return R.data(DeptWrapper.init().entityVO(detail));
+ return R.data(DeptWrapper.build().entityVO(detail));
}
/**
@@ -73,7 +73,7 @@ public class DeptController extends BladeController {
public R> list(@ApiIgnore @RequestParam Map dept, BladeUser bladeUser) {
QueryWrapper queryWrapper = Condition.getQueryWrapper(dept, Dept.class);
List list = deptService.list((!bladeUser.getTenantCode().equals(BladeConstant.ADMIN_TENANT_CODE)) ? queryWrapper.lambda().eq(Dept::getTenantCode, bladeUser.getTenantCode()) : queryWrapper);
- return R.data(DeptWrapper.init().listNodeVO(list));
+ return R.data(DeptWrapper.build().listNodeVO(list));
}
/**
diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/DictController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/DictController.java
index c65bb057..88115d2c 100644
--- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/DictController.java
+++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/DictController.java
@@ -58,7 +58,7 @@ public class DictController extends BladeController {
@ApiOperation(value = "详情", notes = "传入dict")
public R detail(Dict dict) {
Dict detail = dictService.getOne(Condition.getQueryWrapper(dict));
- return R.data(DictWrapper.init().entityVO(detail));
+ return R.data(DictWrapper.build().entityVO(detail));
}
/**
@@ -74,7 +74,7 @@ public class DictController extends BladeController {
public R> list(@ApiIgnore @RequestParam Map dict) {
@SuppressWarnings("unchecked")
List list = dictService.list(Condition.getQueryWrapper(dict, Dict.class).lambda().orderByAsc(Dict::getSort));
- return R.data(DictWrapper.init().listNodeVO(list));
+ return R.data(DictWrapper.build().listNodeVO(list));
}
/**
diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/MenuController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/MenuController.java
index e135f76f..7bd9b5bf 100644
--- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/MenuController.java
+++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/MenuController.java
@@ -58,7 +58,7 @@ public class MenuController extends BladeController {
@ApiOperation(value = "详情", notes = "传入menu")
public R detail(Menu menu) {
Menu detail = menuService.getOne(Condition.getQueryWrapper(menu));
- return R.data(MenuWrapper.init().entityVO(detail));
+ return R.data(MenuWrapper.build().entityVO(detail));
}
/**
@@ -75,7 +75,7 @@ public class MenuController extends BladeController {
public R> list(@ApiIgnore @RequestParam Map menu) {
@SuppressWarnings("unchecked")
List