diff --git a/jnpf-java-boot/jnpf-admin/src/main/resources/application-dev.yml b/jnpf-java-boot/jnpf-admin/src/main/resources/application-dev.yml
index a61c384..8f8dc75 100644
--- a/jnpf-java-boot/jnpf-admin/src/main/resources/application-dev.yml
+++ b/jnpf-java-boot/jnpf-admin/src/main/resources/application-dev.yml
@@ -21,7 +21,7 @@ spring:
port: 3309
username: root
password: linus,.123
- db-name: jnpf_zhihui
+ db-name: jnpf_yys_dev
db-schema: #金仓达梦选填
prepare-url: #自定义url
diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-biz/pom.xml b/jnpf-java-boot/jnpf-example/jnpf-example-biz/pom.xml
new file mode 100644
index 0000000..be46fb3
--- /dev/null
+++ b/jnpf-java-boot/jnpf-example/jnpf-example-biz/pom.xml
@@ -0,0 +1,27 @@
+
+
+
+ jnpf-example
+ com.jnpf
+ 3.5.0-RELEASE
+
+ 4.0.0
+
+ jnpf-example-biz
+
+
+
+ com.jnpf
+ jnpf-example-entity
+ ${project.version}
+
+
+ com.jnpf
+ jnpf-generater-base
+ ${project.version}
+
+
+
+
\ No newline at end of file
diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/mapper/YysPostMapper.java b/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/mapper/YysPostMapper.java
new file mode 100644
index 0000000..e426bf9
--- /dev/null
+++ b/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/mapper/YysPostMapper.java
@@ -0,0 +1,16 @@
+package jnpf.mapper;
+
+
+import jnpf.entity.YysPostEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * yysPost
+ * 版本: V3.5
+ * 版权: 引迈信息技术有限公司(https://www.jnpfsoft.com)
+ * 作者: JNPF开发平台组
+ * 日期: 2024-08-05
+ */
+public interface YysPostMapper extends BaseMapper {
+
+}
diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/YysPostService.java b/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/YysPostService.java
new file mode 100644
index 0000000..6515497
--- /dev/null
+++ b/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/YysPostService.java
@@ -0,0 +1,35 @@
+package jnpf.service;
+
+import jnpf.model.yyspost.*;
+import jnpf.entity.*;
+import java.util.*;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+
+/**
+ * yysPost
+ * 版本: V3.5
+ * 版权: 引迈信息技术有限公司(https://www.jnpfsoft.com)
+ * 作者: JNPF开发平台组
+ * 日期: 2024-08-05
+ */
+public interface YysPostService extends IService {
+ List getList(YysPostPagination yysPostPagination);
+
+ List getTypeList(YysPostPagination yysPostPagination,String dataType);
+
+ YysPostEntity getInfo(String id);
+
+ void delete(YysPostEntity entity);
+
+ void create(YysPostEntity entity);
+
+ boolean update(String id, YysPostEntity entity);
+
+ //子表方法
+ //副表数据方法
+ String checkForm(YysPostForm form,int i);
+
+ void saveOrUpdate(YysPostForm yysPostForm,String id, boolean isSave) throws Exception;
+
+}
diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/impl/YysPostServiceImpl.java b/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/impl/YysPostServiceImpl.java
new file mode 100644
index 0000000..29ef478
--- /dev/null
+++ b/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/impl/YysPostServiceImpl.java
@@ -0,0 +1,317 @@
+package jnpf.service.impl;
+
+import jnpf.entity.*;
+import jnpf.mapper.YysPostMapper;
+import jnpf.service.*;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import jnpf.model.yyspost.*;
+import java.math.BigDecimal;
+import cn.hutool.core.util.ObjectUtil;
+import jnpf.permission.model.authorize.AuthorizeConditionModel;
+import jnpf.util.GeneraterSwapUtil;
+import jnpf.database.model.superQuery.SuperQueryJsonModel;
+import jnpf.database.model.superQuery.ConditionJsonModel;
+import jnpf.database.model.superQuery.SuperQueryConditionModel;
+import java.lang.reflect.Field;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.util.regex.Pattern;
+import jnpf.model.QueryModel;
+import java.util.stream.Collectors;
+import jnpf.base.model.ColumnDataModel;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import jnpf.database.model.superQuery.SuperJsonModel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import java.text.SimpleDateFormat;
+import jnpf.util.*;
+import java.util.*;
+import jnpf.base.UserInfo;
+import jnpf.permission.entity.UserEntity;
+/**
+ *
+ * yysPost
+ * 版本: V3.5
+ * 版权: 引迈信息技术有限公司(https://www.jnpfsoft.com)
+ * 作者: JNPF开发平台组
+ * 日期: 2024-08-05
+ */
+@Service
+public class YysPostServiceImpl extends ServiceImpl implements YysPostService{
+ @Autowired
+ private GeneraterSwapUtil generaterSwapUtil;
+
+ @Autowired
+ private UserProvider userProvider;
+
+ @Override
+ public List getList(YysPostPagination yysPostPagination){
+ return getTypeList(yysPostPagination,yysPostPagination.getDataType());
+ }
+ /** 列表查询 */
+ @Override
+ public List getTypeList(YysPostPagination yysPostPagination,String dataType){
+ String userId=userProvider.get().getUserId();
+ List AllIdList =new ArrayList();
+ List> intersectionList =new ArrayList<>();
+ boolean isPc = ServletUtil.getHeader("jnpf-origin").equals("pc");
+ String columnData = !isPc ? YysPostConstant.getAppColumnData() : YysPostConstant.getColumnData();
+ ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(columnData, ColumnDataModel.class);
+ String ruleJson = !isPc ? JsonUtil.getObjectToString(columnDataModel.getRuleListApp()) : JsonUtil.getObjectToString(columnDataModel.getRuleList());
+
+ int total=0;
+ int yysPostNum =0;
+ QueryWrapper yysPostQueryWrapper=new QueryWrapper<>();
+ List allSuperIDlist = new ArrayList<>();
+ String superOp ="";
+ if (ObjectUtil.isNotEmpty(yysPostPagination.getSuperQueryJson())){
+ List allSuperList = new ArrayList<>();
+ List> intersectionSuperList = new ArrayList<>();
+ String queryJson = yysPostPagination.getSuperQueryJson();
+ SuperJsonModel superJsonModel = JsonUtil.getJsonToBean(queryJson, SuperJsonModel.class);
+ int superNum = 0;
+ QueryWrapper yysPostSuperWrapper = new QueryWrapper<>();
+ yysPostSuperWrapper = generaterSwapUtil.getCondition(new QueryModel(yysPostSuperWrapper,YysPostEntity.class,queryJson,"0"));
+ int yysPostNum1 = yysPostSuperWrapper.getExpression().getNormal().size();
+ if (yysPostNum1>0){
+ List yysPostList =this.list(yysPostSuperWrapper).stream().map(YysPostEntity::getId).collect(Collectors.toList());
+ allSuperList.addAll(yysPostList);
+ intersectionSuperList.add(yysPostList);
+ superNum++;
+ }
+ superOp = superNum > 0 ? superJsonModel.getMatchLogic() : "";
+ //and or
+ if(superOp.equalsIgnoreCase("and")){
+ allSuperIDlist = generaterSwapUtil.getIntersection(intersectionSuperList);
+ }else{
+ allSuperIDlist = allSuperList;
+ }
+ }
+ List allRuleIDlist = new ArrayList<>();
+ String ruleOp ="";
+ if (ObjectUtil.isNotEmpty(ruleJson)){
+ List allRuleList = new ArrayList<>();
+ List> intersectionRuleList = new ArrayList<>();
+ SuperJsonModel ruleJsonModel = JsonUtil.getJsonToBean(ruleJson, SuperJsonModel.class);
+ int ruleNum = 0;
+ QueryWrapper yysPostSuperWrapper = new QueryWrapper<>();
+ yysPostSuperWrapper = generaterSwapUtil.getCondition(new QueryModel(yysPostSuperWrapper,YysPostEntity.class,ruleJson,"0"));
+ int yysPostNum1 = yysPostSuperWrapper.getExpression().getNormal().size();
+ if (yysPostNum1>0){
+ List yysPostList =this.list(yysPostSuperWrapper).stream().map(YysPostEntity::getId).collect(Collectors.toList());
+ allRuleList.addAll(yysPostList);
+ intersectionRuleList.add(yysPostList);
+ ruleNum++;
+ }
+ ruleOp = ruleNum > 0 ? ruleJsonModel.getMatchLogic() : "";
+ //and or
+ if(ruleOp.equalsIgnoreCase("and")){
+ allRuleIDlist = generaterSwapUtil.getIntersection(intersectionRuleList);
+ }else{
+ allRuleIDlist = allRuleList;
+ }
+ }
+ boolean pcPermission = false;
+ boolean appPermission = false;
+ if(isPc && pcPermission){
+ if (!userProvider.get().getIsAdministrator()){
+ Object yysPostObj=generaterSwapUtil.getAuthorizeCondition(new QueryModel(yysPostQueryWrapper,YysPostEntity.class,yysPostPagination.getMenuId(),"0"));
+ if (ObjectUtil.isEmpty(yysPostObj)){
+ return new ArrayList<>();
+ } else {
+ yysPostQueryWrapper = (QueryWrapper)yysPostObj;
+ if( yysPostQueryWrapper.getExpression().getNormal().size()>0){
+ yysPostNum++;
+ }
+ }
+ }
+ }
+ if(!isPc && appPermission){
+ if (!userProvider.get().getIsAdministrator()){
+ Object yysPostObj=generaterSwapUtil.getAuthorizeCondition(new QueryModel(yysPostQueryWrapper,YysPostEntity.class,yysPostPagination.getMenuId(),"0"));
+ if (ObjectUtil.isEmpty(yysPostObj)){
+ return new ArrayList<>();
+ } else {
+ yysPostQueryWrapper = (QueryWrapper)yysPostObj;
+ if( yysPostQueryWrapper.getExpression().getNormal().size()>0){
+ yysPostNum++;
+ }
+ }
+
+
+ }
+ }
+ if(isPc){
+ if(ObjectUtil.isNotEmpty(yysPostPagination.getPostName())){
+ yysPostNum++;
+
+ String value = yysPostPagination.getPostName() instanceof List ?
+ JsonUtil.getObjectToString(yysPostPagination.getPostName()) :
+ String.valueOf(yysPostPagination.getPostName());
+ yysPostQueryWrapper.lambda().like(YysPostEntity::getPostName,value);
+
+ }
+
+ if(ObjectUtil.isNotEmpty(yysPostPagination.getPostCode())){
+ yysPostNum++;
+
+ String value = yysPostPagination.getPostCode() instanceof List ?
+ JsonUtil.getObjectToString(yysPostPagination.getPostCode()) :
+ String.valueOf(yysPostPagination.getPostCode());
+ yysPostQueryWrapper.lambda().like(YysPostEntity::getPostCode,value);
+
+ }
+
+ if(ObjectUtil.isNotEmpty(yysPostPagination.getPostStatus())){
+ yysPostNum++;
+
+ List idList = new ArrayList<>();
+ try {
+ String[][] postStatus = JsonUtil.getJsonToBean(yysPostPagination.getPostStatus(),String[][].class);
+ for(int i=0;i0){
+ idList.add(JsonUtil.getObjectToString(Arrays.asList(postStatus[i])));
+ }
+ }
+ }catch (Exception e1){
+ try {
+ List postStatus = JsonUtil.getJsonToList(yysPostPagination.getPostStatus(),String.class);
+ if(postStatus.size()>0){
+ idList.addAll(postStatus);
+ }
+ }catch (Exception e2){
+ idList.add(String.valueOf(yysPostPagination.getPostStatus()));
+ }
+ }
+ yysPostQueryWrapper.lambda().and(t->{
+ idList.forEach(tt->{
+ t.like(YysPostEntity::getPostStatus, tt).or();
+ });
+ });
+
+ }
+
+ }
+ List intersection = generaterSwapUtil.getIntersection(intersectionList);
+ if (total>0){
+ if (intersection.size()==0){
+ intersection.add("jnpfNullList");
+ }
+ yysPostQueryWrapper.lambda().in(YysPostEntity::getId, intersection);
+ }
+ //是否有高级查询
+ if (StringUtil.isNotEmpty(superOp)){
+ if (allSuperIDlist.size()==0){
+ allSuperIDlist.add("jnpfNullList");
+ }
+ List finalAllSuperIDlist = allSuperIDlist;
+ yysPostQueryWrapper.lambda().and(t->t.in(YysPostEntity::getId, finalAllSuperIDlist));
+ }
+ //是否有数据过滤查询
+ if (StringUtil.isNotEmpty(ruleOp)){
+ if (allRuleIDlist.size()==0){
+ allRuleIDlist.add("jnpfNullList");
+ }
+ List finalAllRuleIDlist = allRuleIDlist;
+ yysPostQueryWrapper.lambda().and(t->t.in(YysPostEntity::getId, finalAllRuleIDlist));
+ }
+
+ //排序
+ if(StringUtil.isEmpty(yysPostPagination.getSidx())){
+ yysPostQueryWrapper.lambda().orderByDesc(YysPostEntity::getId);
+ }else{
+ try {
+ String sidx = yysPostPagination.getSidx();
+ String[] strs= sidx.split("_name");
+ YysPostEntity yysPostEntity = new YysPostEntity();
+ Field declaredField = yysPostEntity.getClass().getDeclaredField(strs[0]);
+ declaredField.setAccessible(true);
+ String value = declaredField.getAnnotation(TableField.class).value();
+ yysPostQueryWrapper="asc".equals(yysPostPagination.getSort().toLowerCase())?yysPostQueryWrapper.orderByAsc(value):yysPostQueryWrapper.orderByDesc(value);
+ } catch (NoSuchFieldException e) {
+ e.printStackTrace();
+ }
+ }
+
+ if("0".equals(dataType)){
+ if((total>0 && AllIdList.size()>0) || total==0){
+ Page page=new Page<>(yysPostPagination.getCurrentPage(), yysPostPagination.getPageSize());
+ IPage userIPage=this.page(page, yysPostQueryWrapper);
+ return yysPostPagination.setData(userIPage.getRecords(),userIPage.getTotal());
+ }else{
+ List list = new ArrayList();
+ return yysPostPagination.setData(list, list.size());
+ }
+ }else{
+ return this.list(yysPostQueryWrapper);
+ }
+ }
+ @Override
+ public YysPostEntity getInfo(String id){
+ QueryWrapper queryWrapper=new QueryWrapper<>();
+ queryWrapper.lambda().eq(YysPostEntity::getId,id);
+ return this.getOne(queryWrapper);
+ }
+ @Override
+ public void create(YysPostEntity entity){
+ this.save(entity);
+ }
+ @Override
+ public boolean update(String id, YysPostEntity entity){
+ return this.updateById(entity);
+ }
+ @Override
+ public void delete(YysPostEntity entity){
+ if(entity!=null){
+ this.removeById(entity.getId());
+ }
+ }
+ /** 验证表单唯一字段,正则,非空 i-0新增-1修改*/
+ @Override
+ public String checkForm(YysPostForm form,int i) {
+ boolean isUp =StringUtil.isNotEmpty(form.getId()) && !form.getId().equals("0");
+ String id="";
+ String countRecover = "";
+ if (isUp){
+ id = form.getId();
+ }
+ //主表字段验证
+ if(StringUtil.isEmpty(form.getPostName())){
+ return "岗位名称不能为空";
+ }
+ if(StringUtil.isEmpty(form.getPostCode())){
+ return "岗位编码不能为空";
+ }
+ if(StringUtil.isNotEmpty(form.getPostSort())){
+ if(!Pattern.compile("^\\d+$").matcher(String.valueOf(form.getPostSort())).matches()){
+ return "请输入正确的数字";
+ }
+ }
+ return countRecover;
+ }
+ /**
+ * 新增修改数据(事务回滚)
+ * @param id
+ * @param yysPostForm
+ * @return
+ */
+ @Override
+ @Transactional
+ public void saveOrUpdate(YysPostForm yysPostForm,String id, boolean isSave) throws Exception{
+ UserInfo userInfo=userProvider.get();
+ UserEntity userEntity = generaterSwapUtil.getUser(userInfo.getUserId());
+ yysPostForm = JsonUtil.getJsonToBean(
+ generaterSwapUtil.swapDatetime(YysPostConstant.getFormData(),yysPostForm),YysPostForm.class);
+ YysPostEntity entity = JsonUtil.getJsonToBean(yysPostForm, YysPostEntity.class);
+
+ if(isSave){
+ String mainId = RandomUtil.uuId() ;
+ entity.setId(mainId);
+ }else{
+ }
+ this.saveOrUpdate(entity);
+
+ }
+}
diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-controller/pom.xml b/jnpf-java-boot/jnpf-example/jnpf-example-controller/pom.xml
new file mode 100644
index 0000000..d8bef13
--- /dev/null
+++ b/jnpf-java-boot/jnpf-example/jnpf-example-controller/pom.xml
@@ -0,0 +1,22 @@
+
+
+
+ jnpf-example
+ com.jnpf
+ 3.5.0-RELEASE
+
+ 4.0.0
+
+ jnpf-example-controller
+
+
+
+ com.jnpf
+ jnpf-example-biz
+ ${project.version}
+
+
+
+
\ No newline at end of file
diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-controller/src/main/java/jnpf/controller/YysPostController.java b/jnpf-java-boot/jnpf-example/jnpf-example-controller/src/main/java/jnpf/controller/YysPostController.java
new file mode 100644
index 0000000..2b85c36
--- /dev/null
+++ b/jnpf-java-boot/jnpf-example/jnpf-example-controller/src/main/java/jnpf/controller/YysPostController.java
@@ -0,0 +1,330 @@
+package jnpf.controller;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jnpf.base.ActionResult;
+import jnpf.base.UserInfo;
+import jnpf.exception.DataException;
+import jnpf.permission.entity.UserEntity;
+import jnpf.service.*;
+import jnpf.entity.*;
+import jnpf.util.*;
+import jnpf.model.yyspost.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import javax.validation.Valid;
+import java.util.*;
+import jnpf.annotation.JnpfField;
+import jnpf.base.vo.PageListVO;
+import jnpf.base.vo.PaginationVO;
+import jnpf.base.vo.DownloadVO;
+import jnpf.config.ConfigValueUtil;
+import jnpf.base.entity.ProvinceEntity;
+import java.io.IOException;
+import java.util.stream.Collectors;
+import jnpf.engine.entity.FlowTaskEntity;
+import jnpf.exception.WorkFlowException;
+import org.springframework.web.multipart.MultipartFile;
+import cn.afterturn.easypoi.excel.ExcelExportUtil;
+import cn.afterturn.easypoi.excel.ExcelImportUtil;
+import cn.afterturn.easypoi.excel.entity.ExportParams;
+import cn.afterturn.easypoi.excel.entity.ImportParams;
+import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
+import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Workbook;
+import java.io.File;
+import jnpf.onlinedev.model.ExcelImFieldModel;
+import jnpf.onlinedev.model.OnlineImport.ImportDataModel;
+import jnpf.onlinedev.model.OnlineImport.ImportFormCheckUniqueModel;
+import jnpf.onlinedev.model.OnlineImport.ExcelImportModel;
+import jnpf.onlinedev.model.OnlineImport.VisualImportModel;
+import cn.xuyanwu.spring.file.storage.FileInfo;
+import lombok.Cleanup;
+import jnpf.model.visualJson.config.HeaderModel;
+import jnpf.base.model.ColumnDataModel;
+import jnpf.base.util.VisualUtils;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * yysPost
+ * @版本: V3.5
+ * @版权: 引迈信息技术有限公司(https://www.jnpfsoft.com)
+ * @作者: JNPF开发平台组
+ * @日期: 2024-08-05
+ */
+@Slf4j
+@RestController
+@Tag(name = "yysPost" , description = "example")
+@RequestMapping("/api/example/YysPost")
+public class YysPostController {
+
+ @Autowired
+ private GeneraterSwapUtil generaterSwapUtil;
+
+ @Autowired
+ private UserProvider userProvider;
+
+ @Autowired
+ private YysPostService yysPostService;
+
+
+
+ @Autowired
+ private ConfigValueUtil configValueUtil;
+
+ /**
+ * 列表
+ *
+ * @param yysPostPagination
+ * @return
+ */
+ @Operation(summary = "获取列表")
+ @PostMapping("/getList")
+ public ActionResult list(@RequestBody YysPostPagination yysPostPagination)throws IOException{
+ List list= yysPostService.getList(yysPostPagination);
+ List