| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646 |
- package jnpf.base.util;
- import cn.hutool.core.collection.CollectionUtil;
- import cn.hutool.core.util.ObjectUtil;
- import cn.hutool.core.util.StrUtil;
- import com.baomidou.dynamic.datasource.annotation.DSTransactional;
- import jnpf.base.UserInfo;
- import jnpf.base.entity.VisualdevEntity;
- import jnpf.base.mapper.FlowFormDataMapper;
- import jnpf.base.model.ColumnDataModel;
- import jnpf.base.model.VisualConst;
- import jnpf.base.model.VisualDevJsonModel;
- import jnpf.base.model.flow.DataModel;
- import jnpf.base.model.form.ModuleFormModel;
- import jnpf.config.ConfigValueUtil;
- import jnpf.constant.MsgCode;
- import jnpf.database.model.dbtable.JdbcTableModel;
- import jnpf.database.model.entity.DbLinkEntity;
- import jnpf.database.util.ConnUtil;
- import jnpf.database.util.DbTypeUtil;
- import jnpf.database.util.DynamicDataSourceUtil;
- import jnpf.database.util.TenantDataSourceUtil;
- import jnpf.exception.DataException;
- import jnpf.exception.WorkFlowException;
- import jnpf.model.visualJson.*;
- import jnpf.model.visualJson.analysis.*;
- import jnpf.onlinedev.model.OnlineInfoModel;
- import jnpf.permission.entity.OrganizeEntity;
- import jnpf.permission.entity.UserEntity;
- import jnpf.permissions.PermissionInterfaceImpl;
- import jnpf.util.*;
- import jnpf.util.visiual.JnpfKeyConsts;
- import lombok.Cleanup;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.collections4.CollectionUtils;
- import org.apache.commons.collections4.MapUtils;
- import org.apache.commons.collections4.map.CaseInsensitiveMap;
- import org.mybatis.dynamic.sql.AndOrCriteriaGroup;
- import org.mybatis.dynamic.sql.BasicColumn;
- import org.mybatis.dynamic.sql.SqlBuilder;
- import org.mybatis.dynamic.sql.SqlTable;
- import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider;
- import org.mybatis.dynamic.sql.insert.GeneralInsertDSL;
- import org.mybatis.dynamic.sql.insert.render.GeneralInsertStatementProvider;
- import org.mybatis.dynamic.sql.render.RenderingStrategies;
- import org.mybatis.dynamic.sql.select.QueryExpressionDSL;
- import org.mybatis.dynamic.sql.select.SelectModel;
- import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
- import org.mybatis.dynamic.sql.update.UpdateDSL;
- import org.mybatis.dynamic.sql.update.UpdateModel;
- import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Component;
- import java.math.BigDecimal;
- import java.sql.Connection;
- import java.sql.SQLException;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.*;
- import java.util.stream.Collectors;
- @Component
- @Slf4j
- public class FlowFormDataUtil {
- @Autowired
- private ConfigValueUtil configValueUtil;
- @Autowired
- private ServiceBaseUtil serviceUtil;
- @Autowired
- private FlowFormDataMapper flowFormDataMapper;
- @Autowired
- private FormInfoUtils formInfoUtils;
- @Autowired
- private VisualBillUtil visualBillUtil;
- /**
- * 从数据库取表主键
- *
- * @param conn
- * @param tableName 表名
- * @return
- */
- public String getTableKey(Connection conn, String tableName) throws SQLException {
- String pKeyName = JdbcTableModel.getPrimaryExculde(conn, tableName, configValueUtil.getMultiTenantColumn());
- if (StringUtil.isEmpty(pKeyName)) {
- pKeyName = TableFeildsEnum.FID.getField();
- }
- String databaseProductName = conn.getMetaData().getDatabaseProductName().trim();
- if (DbTypeUtil.needToUpperCase(databaseProductName)) {
- pKeyName = pKeyName.toUpperCase();
- }
- return pKeyName;
- }
- /**
- * 从配置取主键
- *
- * @param tableModel
- * @return String
- */
- public String getKey(TableModel tableModel, String databaseProductName) {
- boolean toUpperCase = false;
- if (StringUtil.isNotEmpty(databaseProductName)) {
- if (DbTypeUtil.needToUpperCase(databaseProductName)) {
- toUpperCase = !toUpperCase;
- }
- }
- String pKeyName = toUpperCase ? TableFeildsEnum.FID.getField().toUpperCase() : TableFeildsEnum.FID.getField();
- if (tableModel != null && tableModel.getFields() != null) {
- TableFields tableFields = tableModel.getFields().stream().filter(t -> Objects.equals(t.getPrimaryKey(), 1)
- && !t.getField().toLowerCase().contains(TableFeildsEnum.TENANTID.getField())).findFirst().orElse(null);
- pKeyName = Objects.nonNull(tableFields) ? tableFields.getField() : pKeyName;
- }
- return pKeyName;
- }
- /**
- * 获取流程任务id原字段 flowTaskId
- *
- * @param tableModel
- * @param databaseProductName
- * @return
- */
- public String getFlowTaskId(TableModel tableModel, String databaseProductName) {
- boolean toUpperCase = false;
- if (StringUtil.isNotEmpty(databaseProductName)) {
- if (DbTypeUtil.needToUpperCase(databaseProductName)) {
- toUpperCase = !toUpperCase;
- }
- }
- String pKeyName = toUpperCase ? TableFeildsEnum.FLOWTASKID.getField().toUpperCase() : TableFeildsEnum.FLOWTASKID.getField();
- if (tableModel != null && tableModel.getFields() != null) {
- TableFields tableFields = tableModel.getFields().stream().filter(t ->
- t.getField().toLowerCase().contains(TableFeildsEnum.FLOWTASKID.getField())).findFirst().orElse(null);
- pKeyName = Objects.nonNull(tableFields) ? tableFields.getField() : pKeyName;
- }
- return pKeyName;
- }
- //---------------------------------------------信息---------------------------------------------
- /**
- * 获取编辑页数据
- *
- * @param visualdevEntity
- * @param id
- * @return
- */
- public Map<String, Object> getEditDataInfo(VisualdevEntity visualdevEntity, String id, OnlineInfoModel infoModel) {
- Map<String, Object> allDataMap = new HashMap<>();
- FormDataModel formData = JsonUtil.getJsonToBean(visualdevEntity.getFormData(), FormDataModel.class);
- Boolean logicalDelete = formData.getLogicalDelete();
- //权限参数
- ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(visualdevEntity.getColumnData(), ColumnDataModel.class);
- Boolean needP = false;
- List<String> formPerList = new ArrayList<>();
- if (columnDataModel != null && StringUtil.isNotEmpty(infoModel.getMenuId())) {
- needP = columnDataModel.getUseFormPermission();
- Map<String, Object> pMap = PermissionInterfaceImpl.getFormMap();
- if (pMap.get(infoModel.getMenuId()) != null) {
- formPerList = JsonUtil.getJsonToList(pMap.get(infoModel.getMenuId()), ModuleFormModel.class).stream()
- .map(ModuleFormModel::getEnCode).collect(Collectors.toList());
- }
- }
- Object mainId = id;
- boolean autoIncrement = Objects.equals(formData.getPrimaryKeyPolicy(), 2);
- if (autoIncrement) {
- mainId = Long.parseLong(id);
- }
- //是否开启并发锁
- String version = "";
- if (formData.getConcurrencyLock()) {
- //查询
- version = TableFeildsEnum.VERSION.getField();
- }
- List<FieLdsModel> list = JsonUtil.getJsonToList(formData.getFields(), FieLdsModel.class);
- List<TableModel> tableModelList = JsonUtil.getJsonToList(visualdevEntity.getVisualTables(), TableModel.class);
- RecursionForm recursionForm = new RecursionForm();
- recursionForm.setList(list);
- recursionForm.setTableModelList(tableModelList);
- List<FormAllModel> formAllModel = new ArrayList<>();
- FormCloumnUtil.recursionForm(recursionForm, formAllModel);
- //form的属性
- List<FormAllModel> mast = formAllModel.stream().filter(t -> FormEnum.mast.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList());
- List<FormAllModel> table = formAllModel.stream().filter(t -> FormEnum.table.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList());
- List<FormAllModel> mastTable = formAllModel.stream().filter(t -> FormEnum.mastTable.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList());
- TableModel mainTable = tableModelList.stream().filter(t -> t.getTypeId().equals("1")).findFirst().orElse(null);
- DbLinkEntity linkEntity = serviceUtil.getDbLink(visualdevEntity.getDbLinkId());
- try {
- DynamicDataSourceUtil.switchToDataSource(linkEntity);
- @Cleanup Connection conn = ConnUtil.getConnOrDefault(linkEntity);
- String dbType = conn.getMetaData().getDatabaseProductName();
- String pKeyName = this.getKey(mainTable, dbType);
- SqlTable mainSqlTable = SqlTable.of(mainTable.getTable());
- String flowTaskId = this.getFlowTaskId(mainTable, dbType);
- List<AndOrCriteriaGroup> groupList = new ArrayList<>();
- groupList.add(SqlBuilder.or(mainSqlTable.column(flowTaskId), SqlBuilder.isEqualTo(mainId.toString())));
- SelectStatementProvider render = SqlBuilder.select(mainSqlTable.allColumns())
- .from(mainSqlTable)
- .where(mainSqlTable.column(pKeyName), SqlBuilder.isEqualTo(mainId), groupList)
- .build().render(RenderingStrategies.MYBATIS3);
- Map<String, Object> mainAllMap = Optional.ofNullable(flowFormDataMapper.selectOneMappedRow(render)).orElse(new HashMap<>());
- if (mainAllMap.size() == 0) {
- return new HashMap<>();
- }
- //主表
- List<String> mainTableFields = mast.stream().filter(m -> StringUtil.isNotEmpty(m.getFormColumnModel().getFieLdsModel().getVModel()))
- .map(s -> s.getFormColumnModel().getFieLdsModel().getVModel()).collect(Collectors.toList());
- //开启权限移除字段
- if (needP) {
- if (CollectionUtils.isEmpty(formPerList)) {
- mainTableFields = Collections.EMPTY_LIST;
- } else {
- List<String> newList = new ArrayList<>();
- for (String item : mainTableFields) {
- if (formPerList.contains(item)) {
- newList.add(item);
- }
- }
- mainTableFields = newList;
- }
- }
- if (StringUtil.isNotEmpty(version)) {
- mainTableFields.add(version);
- }
- mainTableFields.add(pKeyName);
- mainTableFields.add(flowTaskId);
- List<BasicColumn> mainTableBasicColumn = mainTableFields.stream().map(m -> SqlTable.of(mainTable.getTable()).column(m)).collect(Collectors.toList());
- SelectStatementProvider mainRender = SqlBuilder.select(mainTableBasicColumn)
- .from(mainSqlTable)
- .where(mainSqlTable.column(pKeyName), SqlBuilder.isEqualTo(mainId), groupList)
- .build().render(RenderingStrategies.MYBATIS3);
- Map<String, Object> mainMap = flowFormDataMapper.selectOneMappedRow(mainRender);
- if (ObjectUtil.isNotEmpty(mainMap)) {
- //转换主表里的数据
- List<FieLdsModel> mainFieldList = mast.stream().filter(m -> StringUtil.isNotEmpty(m.getFormColumnModel().getFieLdsModel().getVModel()))
- .map(t -> t.getFormColumnModel().getFieLdsModel()).collect(Collectors.toList());
- mainMap = formInfoUtils.swapDataInfoType(mainFieldList, mainMap);
- allDataMap.putAll(mainMap);
- allDataMap.put(FlowFormConstant.FLOWTASKID, mainMap.get(flowTaskId));
- }
- //副表
- Map<String, List<FormMastTableModel>> groupByTableNames = mastTable.stream().map(mt -> mt.getFormMastTableModel()).collect(Collectors.groupingBy(ma -> ma.getTable()));
- Iterator<Map.Entry<String, List<FormMastTableModel>>> entryIterator = groupByTableNames.entrySet().iterator();
- while (entryIterator.hasNext()) {
- Map.Entry<String, List<FormMastTableModel>> next = entryIterator.next();
- String childTableName = next.getKey();
- List<FormMastTableModel> childMastTableList = next.getValue();
- //开启权限移除字段
- if (needP) {
- if (CollectionUtils.isEmpty(formPerList)) {
- childMastTableList = Collections.EMPTY_LIST;
- } else {
- List<FormMastTableModel> newList = new ArrayList<>();
- for (FormMastTableModel item : childMastTableList) {
- if (formPerList.contains(item.getVModel())) {
- newList.add(item);
- }
- }
- childMastTableList = newList;
- }
- }
- TableModel childTableModel = tableModelList.stream().filter(t -> t.getTable().equals(childTableName)).findFirst().orElse(null);
- SqlTable mastSqlTable = SqlTable.of(childTableName);
- List<BasicColumn> mastTableBasicColumn = childMastTableList.stream().filter(m -> StringUtil.isNotEmpty(m.getField()))
- .map(m -> mastSqlTable.column(m.getField())).collect(Collectors.toList());
- //添加副表关联字段,不然数据会空没有字段名称
- mastTableBasicColumn.add(mastSqlTable.column(childTableModel.getTableField()));
- //主表主键
- String mainField = childTableModel.getRelationField();
- Object mainValue = new CaseInsensitiveMap(mainAllMap).get(mainField);
- //子表外键
- String childFoIdFiled = childTableModel.getTableField();
- //外键字段是否varchar转换
- TableFields fogIdField = childTableModel.getFields().stream().filter(t -> t.getField().equals(childFoIdFiled)).findFirst().orElse(null);
- boolean fogIdTypeString = Objects.nonNull(fogIdField) ? fogIdField.getDataType().toLowerCase().contains("varchar") : false;
- if (fogIdTypeString) {
- mainValue = mainValue.toString();
- }
- QueryExpressionDSL<SelectModel>.QueryExpressionWhereBuilder mastWhere = SqlBuilder.select(mastTableBasicColumn).from(mastSqlTable).where();
- mastWhere.and(mastSqlTable.column(childFoIdFiled), SqlBuilder.isEqualTo(mainValue));
- //逻辑删除不展示
- if (logicalDelete) {
- mastWhere.and(mastSqlTable.column(TableFeildsEnum.DELETEMARK.getField()), SqlBuilder.isNull());
- }
- SelectStatementProvider mastRender = mastWhere.build().render(RenderingStrategies.MYBATIS3);
- List<Map<String, Object>> childMapList = flowFormDataMapper.selectManyMappedRows(mastRender);
- if (CollectionUtils.isNotEmpty(childMapList)) {
- Map<String, Object> soloDataMap = childMapList.get(0);
- Map<String, Object> renameKeyMap = new HashMap<>();
- for (Map.Entry entry : soloDataMap.entrySet()) {
- FormMastTableModel model = childMastTableList.stream().filter(child -> child.getField().equalsIgnoreCase(String.valueOf(entry.getKey()))).findFirst().orElse(null);
- if (model != null) renameKeyMap.put(model.getVModel(), entry.getValue());
- }
- List<FieLdsModel> columnChildFields = childMastTableList.stream().map(cl -> cl.getMastTable().getFieLdsModel()).collect(Collectors.toList());
- renameKeyMap = formInfoUtils.swapDataInfoType(columnChildFields, renameKeyMap);
- allDataMap.putAll(renameKeyMap);
- }
- }
- //设计子表
- Boolean finalNeedP = needP;
- List<String> finalFormPerList = formPerList;
- table.stream().map(t -> t.getChildList()).forEach(
- t1 -> {
- try {
- String childTableName = t1.getTableName();
- TableModel tableModel = tableModelList.stream().filter(tm -> tm.getTable().equals(childTableName)).findFirst().orElse(null);
- SqlTable childSqlTable = SqlTable.of(childTableName);
- List<FormColumnModel> chilFieldList = t1.getChildList().stream().filter(t2 -> StringUtil.isNotEmpty(t2.getFieLdsModel().getVModel())).collect(Collectors.toList());
- String tableModelName = t1.getTableModel();
- //开启权限移除字段
- if (finalNeedP) {
- if (CollectionUtils.isEmpty(finalFormPerList)) {
- chilFieldList = Collections.EMPTY_LIST;
- } else {
- List<FormColumnModel> newList = new ArrayList<>();
- for (FormColumnModel item : chilFieldList) {
- if (finalFormPerList.contains(tableModelName + "-" + item.getFieLdsModel().getVModel())) {
- newList.add(item);
- }
- }
- chilFieldList = newList;
- }
- }
- List<BasicColumn> childFields = chilFieldList.stream().map(t2 -> childSqlTable.column(t2.getFieLdsModel().getVModel())).collect(Collectors.toList());
- childFields.add(childSqlTable.column(tableModel.getTableField()));
- String childKeyName = this.getKey(tableModel, dbType);
- childFields.add(childSqlTable.column(childKeyName));
- //主表主键
- String mainField = tableModel.getRelationField();
- Object mainValue = new CaseInsensitiveMap(mainAllMap).get(mainField);
- //子表外键
- String childFoIdFiled = tableModel.getTableField();
- TableFields fogIdField = tableModel.getFields().stream().filter(t -> t.getField().equals(childFoIdFiled)).findFirst().orElse(null);
- if (VisualConst.DB_INT_ALL.contains(fogIdField.getField().toLowerCase())) {
- mainValue = Long.parseLong(String.valueOf(mainValue));
- }
- QueryExpressionDSL<SelectModel>.QueryExpressionWhereBuilder childWhere = SqlBuilder.select(childFields).from(childSqlTable).where();
- childWhere.and(childSqlTable.column(childFoIdFiled), SqlBuilder.isEqualTo(mainValue));
- //逻辑删除不展示
- if (logicalDelete) {
- childWhere.and(childSqlTable.column(TableFeildsEnum.DELETEMARK.getField()), SqlBuilder.isNull());
- }
- SelectStatementProvider childRender = childWhere.build().render(RenderingStrategies.MYBATIS3);
- List<Map<String, Object>> childMapList = flowFormDataMapper.selectManyMappedRows(childRender);
- if (ObjectUtil.isNotEmpty(childMapList)) {
- List<FieLdsModel> childFieldModels = t1.getChildList().stream().map(t2 -> t2.getFieLdsModel()).collect(Collectors.toList());
- childMapList = childMapList.stream().map(c1 -> {
- try {
- return formInfoUtils.swapDataInfoType(childFieldModels, c1);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return c1;
- }).collect(Collectors.toList());
- Map<String, Object> childMap = new HashMap<>(1);
- childMap.put(t1.getTableModel(), childMapList);
- allDataMap.putAll(childMap);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- );
- for (String key : allDataMap.keySet()) {
- if (pKeyName.equalsIgnoreCase(key)) {
- allDataMap.put("id", allDataMap.get(key));
- break;
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- DynamicDataSourceUtil.clearSwitchDataSource();
- }
- return allDataMap;
- }
- //---------------------------------------------新增---------------------------------------------
- /**
- * 新增数据处理
- **/
- @DSTransactional
- public Map<String, Object> create(DataModel dataModel) throws WorkFlowException {
- try {
- //处理好的数据
- Map<String, Object> result = this.createDataList(dataModel);
- return result;
- } catch (DataException dataException) {
- throw new WorkFlowException(dataException.getMessage());
- } catch (Exception e) {
- //close
- e.printStackTrace();
- log.error("新增异常:{}", e.getMessage());
- throw new WorkFlowException(MsgCode.FA028.get(), e.getMessage());
- }
- }
- /**
- * 新增数据
- **/
- public Map<String, Object> createDataList(DataModel dataModel) throws SQLException, DataException {
- //处理好的数据
- Map<String, Object> result = new HashMap<>(16);
- List<TableModel> tableModelList = dataModel.getTableModelList();
- List<FormAllModel> formAllModel = dataModel.getFormAllModel();
- //有表数据处理
- if (tableModelList.size() > 0) {
- DbLinkEntity link = dataModel.getLink();
- DynamicDataSourceUtil.switchToDataSource(link);
- try {
- @Cleanup Connection conn = ConnUtil.getConnOrDefault(link);
- String dbType = conn.getMetaData().getDatabaseProductName().trim();
- dataModel.setDbType(dbType);
- //主表
- this.createMast(formAllModel, dataModel, result);
- //子表
- this.createTable(formAllModel, dataModel, result);
- //副表
- this.createMastTable(formAllModel, dataModel, result);
- } finally {
- DynamicDataSourceUtil.clearSwitchDataSource();
- }
- } else {
- //无表数据处理
- result = this.createAll(dataModel, formAllModel);
- }
- return result;
- }
- /**
- * 子表数据
- **/
- private void createTable(List<FormAllModel> formAllModel, DataModel dataModel, Map<String, Object> result) throws SQLException {
- List<TableModel> tableModelList = dataModel.getTableModelList();
- Map<String, Object> dataNewMap = dataModel.getDataNewMap();
- boolean autoIncrement = Objects.equals(dataModel.getPrimaryKeyPolicy(), 2);
- String flowId = "";
- if (dataNewMap.get(FlowFormConstant.FLOWID) != null && StringUtil.isNotEmpty(dataNewMap.get(FlowFormConstant.FLOWID).toString())) {
- flowId = dataNewMap.get(FlowFormConstant.FLOWID).toString();
- }
- UserEntity userEntity = dataModel.getUserEntity();
- //子表
- List<FormAllModel> tableForm = formAllModel.stream().filter(t -> FormEnum.table.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList());
- for (FormAllModel itemModel : tableForm) {
- FormColumnTableModel childModel = itemModel.getChildList();
- if (childModel.getDisabled()) continue;
- String key = childModel.getTableModel();
- String tableName = childModel.getTableName();
- //子表数据
- List<Map<String, Object>> chidList = dataNewMap.get(key) != null ? (List<Map<String, Object>>) dataNewMap.get(key) : new ArrayList<>();
- List<FormColumnModel> formColumnModels = childModel.getChildList().stream().filter(g -> StringUtil.isNotEmpty(g.getFieLdsModel().getVModel())).collect(Collectors.toList());
- // if (CollectionUtils.isEmpty(formColumnModels)) continue;
- if (Objects.equals(childModel.getIsNumLimit(), true) && chidList.size() > childModel.getNumLimit()) {
- throw new DataException(MsgCode.VS033.get(childModel.getLabel()));
- }
- //子表主键
- TableModel tableModel = tableModelList.stream().filter(k -> k.getTable().equals(tableName)).findFirst().orElse(null);
- String table = tableModel.getTable();
- //子表主键
- String childKeyName = this.getKey(tableModel, dataModel.getDbType());
- //子表外键字段
- String foreignKey = tableModel.getTableField();
- TableFields foreignField = tableModel.getFields().stream().filter(t -> t.getField().equalsIgnoreCase(foreignKey)).findFirst().orElse(null);
- if (foreignField == null) {
- throw new SQLException(MsgCode.COD001.get());
- }
- //主表关联字段
- Object foreignValue = dataNewMap.get(tableModel.getRelationField());
- if (VisualConst.DB_INT_ALL.contains(foreignField.getDataType())) {
- foreignValue = Long.parseLong(String.valueOf(foreignValue));
- }
- SqlTable sqlTable = SqlTable.of(table);
- for (Map<String, Object> objectMap : chidList) {
- if (StringUtil.isNotEmpty(flowId)) {
- objectMap.put(FlowFormConstant.FLOWID, flowId);
- }
- GeneralInsertDSL generalInsertDSL = SqlBuilder.insertInto(sqlTable).set(sqlTable.column(foreignKey)).toValue(foreignValue);
- for (FormColumnModel column : formColumnModels) {
- FieLdsModel fieLdsModel = column.getFieLdsModel();
- String childKey = fieLdsModel.getVModel();
- //表单字段和外键字段重复不写入(写入外键值)
- if (Objects.equals(foreignKey, childKey)) {
- continue;
- }
- Object data = objectMap.get(childKey);
- String fieldKey = fieLdsModel.getConfig().getParentVModel() + "-" + childKey;
- //流程表单权限
- if (CollectionUtils.isNotEmpty(dataModel.getFlowFormOperates())) {
- boolean hasOperate = isHasOperate(dataModel, fieldKey);
- if (!hasOperate) {
- continue;
- }
- } else if (dataModel.getNeedPermission()) {
- if (CollectionUtil.isNotEmpty(dataModel.getFormPerList())) {
- if (!dataModel.getFormPerList().contains(fieldKey)) {
- continue;
- }
- } else {
- continue;
- }
- }
- //处理系统自动生成
- data = this.create(fieLdsModel, data, true, userEntity, dataModel.isLinkOpen());
- data = visualBillUtil.getBillNumber(dataModel.getVisualId(), fieLdsModel, objectMap, data);
- getDSL(sqlTable, null, generalInsertDSL, fieLdsModel.getFormat(), childKey, data);
- }
- if (!autoIncrement) {
- generalInsertDSL = generalInsertDSL.set(sqlTable.column(childKeyName)).toValue(RandomUtil.uuId());
- }
- //租户信息
- addTenantId(generalInsertDSL, sqlTable);
- GeneralInsertStatementProvider insertRender = generalInsertDSL.build().render(RenderingStrategies.MYBATIS3);
- flowFormDataMapper.generalInsert(insertRender);
- }
- }
- }
- /**
- * 副表数据
- **/
- private void createMastTable(List<FormAllModel> formAllModel, DataModel dataModel, Map<String, Object> result) throws SQLException {
- List<TableModel> tableModelList = dataModel.getTableModelList();
- Map<String, Object> dataNewMap = dataModel.getDataNewMap();
- Integer primaryKeyPolicy = dataModel.getPrimaryKeyPolicy();
- UserEntity userEntity = dataModel.getUserEntity();
- //副表
- Map<String, List<FormAllModel>> mastTableAll = formAllModel.stream().filter(t -> FormEnum.mastTable.getMessage().equals(t.getJnpfKey())).collect(Collectors.groupingBy(e -> e.getFormMastTableModel().getTable()));
- for (String key : mastTableAll.keySet()) {
- Optional<TableModel> first = tableModelList.stream().filter(t -> t.getTable().equals(key)).findFirst();
- if (!first.isPresent()) {
- throw new SQLException(MsgCode.COD001.get());
- }
- TableModel tableModel = first.get();
- String tableModelTable = tableModel.getTable();
- String childKeyName = this.getKey(tableModel, dataModel.getDbType());
- //副表外键字段
- String foreignKey = tableModel.getTableField();
- TableFields foreignField = tableModel.getFields().stream().filter(t -> t.getField().equalsIgnoreCase(foreignKey)).findFirst().orElse(null);
- if (foreignField == null) {
- throw new SQLException(MsgCode.COD001.get());
- }
- //主表关联字段
- Object foreignValue = dataNewMap.get(tableModel.getRelationField());
- if (VisualConst.DB_INT_ALL.contains(foreignField.getDataType())) {
- foreignValue = Long.parseLong(String.valueOf(foreignValue));
- }
- List<FormAllModel> masTableList = mastTableAll.get(key);
- SqlTable sqlTable = SqlTable.of(tableModelTable);
- GeneralInsertDSL generalInsertDSL = SqlBuilder.insertInto(sqlTable).set(sqlTable.column(foreignKey)).toValue(foreignValue);
- for (FormAllModel model : masTableList) {
- FormMastTableModel formMastTableModel = model.getFormMastTableModel();
- FormColumnModel mastTable = formMastTableModel.getMastTable();
- FieLdsModel fieLdsModel = mastTable.getFieLdsModel();
- String mostTableKey = fieLdsModel.getVModel();
- String field = formMastTableModel.getField();
- //表单字段和外键字段重复不写入(写入外键值)
- if (StringUtil.isEmpty(mostTableKey) || Objects.equals(foreignKey, field)) {
- continue;
- }
- Object data = dataNewMap.get(mostTableKey);
- //流程表单权限
- if (CollectionUtils.isNotEmpty(dataModel.getFlowFormOperates())) {
- boolean hasOperate = isHasOperate(dataModel, mostTableKey);
- if (!hasOperate) {
- continue;
- }
- } else if (dataModel.getNeedPermission()) {
- if (CollectionUtil.isNotEmpty(dataModel.getFormPerList())) {
- if (!dataModel.getFormPerList().contains(mostTableKey)) {
- continue;
- }
- } else {
- continue;
- }
- }
- //处理系统自动生成
- data = this.create(fieLdsModel, data, true, userEntity, dataModel.isLinkOpen());
- data = visualBillUtil.getBillNumber(dataModel.getVisualId(), fieLdsModel, dataNewMap, data);
- //返回值
- result.put(mostTableKey, data);
- getDSL(sqlTable, null, generalInsertDSL, fieLdsModel.getFormat(), field, data);
- }
- //sql主键
- if (primaryKeyPolicy == 1) {
- generalInsertDSL = generalInsertDSL.set(sqlTable.column(childKeyName)).toValue(RandomUtil.uuId());
- }
- //租户信息
- addTenantId(generalInsertDSL, sqlTable);
- GeneralInsertStatementProvider insertRender = generalInsertDSL.build().render(RenderingStrategies.MYBATIS3);
- flowFormDataMapper.generalInsert(insertRender);
- }
- }
- /**
- * 主表数据
- **/
- private void createMast(List<FormAllModel> formAllModel, DataModel dataModel, Map<String, Object> result) throws SQLException {
- List<TableModel> tableModelList = dataModel.getTableModelList();
- Map<String, Object> dataNewMap = dataModel.getDataNewMap();
- Object mainId = dataModel.getMainId();
- boolean autoIncrement = Objects.equals(dataModel.getPrimaryKeyPolicy(), 2);
- if (autoIncrement) {
- mainId = Long.parseLong(dataModel.getMainId());
- }
- UserEntity userEntity = dataModel.getUserEntity();
- Optional<TableModel> first = tableModelList.stream().filter(t -> "1".equals(t.getTypeId())).findFirst();
- if (!first.isPresent()) {
- throw new SQLException(MsgCode.COD001.get());
- }
- TableModel tableModel = first.get();
- String mastTableName = tableModel.getTable();
- List<FormAllModel> mastForm = formAllModel.stream().filter(t -> FormEnum.mast.getMessage().equals(t.getJnpfKey())).filter(t -> StringUtil.isNotEmpty(t.getFormColumnModel().getFieLdsModel().getVModel())).collect(Collectors.toList());
- //新增字段
- String keyName = this.getKey(tableModel, dataModel.getDbType());
- SqlTable sqlTable = SqlTable.of(mastTableName);
- String flowTaskId = this.getFlowTaskId(tableModel, dataModel.getDbType());
- GeneralInsertDSL generalInsertDSL = SqlBuilder.insertInto(sqlTable).set(sqlTable.column(keyName)).toValue(mainId)
- .set(sqlTable.column(flowTaskId)).toValue(mainId.toString());
- if (autoIncrement) {
- generalInsertDSL = SqlBuilder.insertInto(sqlTable).set(sqlTable.column(flowTaskId)).toValue(mainId.toString());
- }
- for (FormAllModel model : mastForm) {
- FieLdsModel fieLdsModel = model.getFormColumnModel().getFieLdsModel();
- String field = fieLdsModel.getVModel();
- Object data = dataNewMap.get(field);
- data = data instanceof List ? JsonUtil.getObjectToString(data) : data;
- //流程表单权限
- if (CollectionUtils.isNotEmpty(dataModel.getFlowFormOperates())) {
- boolean hasOperate = isHasOperate(dataModel, field);
- if (!hasOperate) {
- continue;
- }
- } else if (dataModel.getNeedPermission()) {
- if (CollectionUtil.isNotEmpty(dataModel.getFormPerList())) {
- if (!dataModel.getFormPerList().contains(field)) {
- continue;
- }
- } else {
- continue;
- }
- }
- //处理系统自动生成
- data = this.create(fieLdsModel, data, true, userEntity, dataModel.isLinkOpen());
- data = visualBillUtil.getBillNumber(dataModel.getVisualId(), fieLdsModel, dataNewMap, data);
- if (JnpfKeyConsts.BILLRULE.equals(fieLdsModel.getConfig().getJnpfKey())) dataNewMap.put(field, data);
- getDSL(sqlTable, null, generalInsertDSL, fieLdsModel.getFormat(), field, data);
- }
- //判断是否开启锁
- if (dataModel.getConcurrencyLock()) {
- generalInsertDSL = generalInsertDSL.set(sqlTable.column(TableFeildsEnum.VERSION.getField())).toValue(dataNewMap.get(TableFeildsEnum.VERSION.getField()));
- }
- //添加流程引擎信息
- if (dataNewMap.get(FlowFormConstant.FLOWID) != null && StringUtil.isNotEmpty(dataNewMap.get(FlowFormConstant.FLOWID).toString())) {
- generalInsertDSL = generalInsertDSL.set(sqlTable.column(TableFeildsEnum.FLOWID.getField())).toValue(dataNewMap.get(FlowFormConstant.FLOWID));
- }
- //租户信息
- addTenantId(generalInsertDSL, sqlTable);
- GeneralInsertStatementProvider insertRender = generalInsertDSL.build().render(RenderingStrategies.MYBATIS3);
- flowFormDataMapper.generalInsert(insertRender);
- //设置实际主键id
- getRealMainId(dataModel, tableModel, keyName, autoIncrement, mastTableName, mainId);
- dataNewMap.put(keyName, dataModel.getMainId());
- }
- /**
- * 获取实际主键id
- *
- * @param dataModel
- * @param realIdKey 主表主键
- * @param autoIncrement 自增设置id
- * @param mastTableName
- * @throws SQLException
- */
- private void getRealMainId(DataModel dataModel, TableModel tableModel, String realIdKey, boolean autoIncrement, String mastTableName, Object flowTaskId) {
- if (autoIncrement) {
- String flowTaskKey = this.getFlowTaskId(tableModel, dataModel.getDbType());
- List<String> mastFile = new ArrayList<>();
- mastFile.add(flowTaskKey);
- mastFile.add(realIdKey);
- SqlTable mastSqlTable = SqlTable.of(mastTableName);
- SelectStatementProvider mastRender = SqlBuilder.select(mastFile.stream().map(m -> mastSqlTable.column(m)).collect(Collectors.toList()))
- .from(mastSqlTable)
- .where(mastSqlTable.column(flowTaskKey), SqlBuilder.isEqualTo(flowTaskId.toString()))
- .build().render(RenderingStrategies.MYBATIS3);
- Map<String, Object> map = flowFormDataMapper.selectOneMappedRow(mastRender);
- dataModel.setMainId(map.get(realIdKey) != null ? map.get(realIdKey).toString() : dataModel.getMainId());
- }
- }
- /**
- * 新增系统赋值
- **/
- private Object create(FieLdsModel fieLdsModel, Object dataValue, boolean isTable, UserEntity userEntity, boolean isLink) {
- UserInfo user = UserProvider.getUser();
- String jnpfKey = fieLdsModel.getConfig().getJnpfKey();
- String rule = fieLdsModel.getConfig().getRule();
- String format = DateTimeFormatConstant.getFormat(fieLdsModel.getFormat());
- Object value = dataValue;
- //外链跳过系统参数生成
- if (isLink) {
- List<String> systemAttList = new ArrayList<>();
- systemAttList.add(JnpfKeyConsts.CREATEUSER);
- systemAttList.add(JnpfKeyConsts.CURRORGANIZE);
- systemAttList.add(JnpfKeyConsts.CURRPOSITION);
- systemAttList.add(JnpfKeyConsts.CURRDEPT);
- systemAttList.add(JnpfKeyConsts.MODIFYUSER);
- if (systemAttList.contains(jnpfKey)) {
- return null;
- }
- }
- switch (jnpfKey) {
- case JnpfKeyConsts.CREATEUSER:
- value = userEntity.getId();
- break;
- case JnpfKeyConsts.CREATETIME:
- value = new Date();
- break;
- case JnpfKeyConsts.CURRORGANIZE:
- case JnpfKeyConsts.CURRDEPT:
- if (user != null && CollectionUtil.isNotEmpty(user.getOrganizeIds())) {
- value = JsonUtil.getObjectToString(user.getOrganizeIds());
- }
- break;
- case JnpfKeyConsts.MODIFYTIME:
- value = null;
- break;
- case JnpfKeyConsts.MODIFYUSER:
- value = null;
- break;
- case JnpfKeyConsts.CURRPOSITION:
- if (user != null && CollectionUtil.isNotEmpty(user.getPositionIds())) {
- value = JsonUtil.getObjectToString(user.getPositionIds());
- }
- break;
- case JnpfKeyConsts.BILLRULE:
- if (fieLdsModel.getConfig().getRuleType() == null || Objects.equals(fieLdsModel.getConfig().getRuleType(), 1)) {
- try {
- value = serviceUtil.getBillNumber(rule);
- } catch (Exception e) {
- value = null;
- }
- }
- break;
- case JnpfKeyConsts.DATE:
- case JnpfKeyConsts.DATE_CALCULATE:
- if (isTable) {
- try {
- if (dataValue == null || "".equals(dataValue)) {
- return null;
- }
- if (dataValue instanceof String) {
- try {
- SimpleDateFormat formatter = new SimpleDateFormat(format);
- value = formatter.parse(dataValue.toString());
- } catch (ParseException var3) {
- return null;
- }
- } else {
- value = new Date(Long.valueOf(String.valueOf(dataValue)));
- }
- } catch (Exception e) {
- }
- }
- break;
- case JnpfKeyConsts.NUM_INPUT:
- case JnpfKeyConsts.CALCULATE:
- if (isTable) {
- try {
- value = new BigDecimal(String.valueOf(dataValue));
- } catch (Exception e) {
- }
- }
- break;
- default:
- if (isTable) {
- value = this.valueToNull(value);
- }
- break;
- }
- return value;
- }
- /**
- * 无表插入数据
- **/
- private Map<String, Object> createAll(DataModel dataModel, List<FormAllModel> formAllModel) {
- Map<String, Object> dataNewMap = dataModel.getDataNewMap();
- UserEntity userEntity = dataModel.getUserEntity();
- //处理好的数据
- Map<String, Object> result = new HashMap<>(16);
- List<FormAllModel> mastForm = formAllModel.stream().filter(t -> FormEnum.mast.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList());
- List<FormAllModel> tableForm = formAllModel.stream().filter(t -> FormEnum.table.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList());
- for (String key : dataNewMap.keySet()) {
- FormAllModel model = mastForm.stream().filter(t -> key.equals(t.getFormColumnModel().getFieLdsModel().getVModel())).findFirst().orElse(null);
- if (model != null) {
- FieLdsModel fieLdsModel = model.getFormColumnModel().getFieLdsModel();
- Object data = dataNewMap.get(key);
- //处理系统自动生成
- data = this.create(fieLdsModel, data, false, userEntity, dataModel.isLinkOpen());
- result.put(key, data);
- } else {
- FormAllModel childModel = tableForm.stream().filter(t -> key.equals(t.getChildList().getTableModel())).findFirst().orElse(null);
- if (childModel != null) {
- //子表主键
- List<FormColumnModel> childList = childModel.getChildList().getChildList();
- List<Map<String, Object>> childDataMap = (List<Map<String, Object>>) dataNewMap.get(key);
- //子表处理的数据
- List<Map<String, Object>> childResult = new ArrayList<>();
- for (Map<String, Object> objectMap : childDataMap) {
- //子表单体处理的数据
- Map<String, Object> childOneResult = new HashMap<>(16);
- for (String childKey : objectMap.keySet()) {
- FormColumnModel columnModel = childList.stream().filter(t -> childKey.equals(t.getFieLdsModel().getVModel())).findFirst().orElse(null);
- if (columnModel != null) {
- FieLdsModel fieLdsModel = columnModel.getFieLdsModel();
- Object data = objectMap.get(childKey);
- //处理系统自动生成
- data = this.create(fieLdsModel, data, false, userEntity, dataModel.isLinkOpen());
- childOneResult.put(childKey, data);
- }
- }
- childResult.add(childOneResult);
- }
- result.put(key, childResult);
- }
- }
- }
- return result;
- }
- //--------------------------------------------修改 ----------------------------------------------------
- /**
- * 修改数据处理
- **/
- @DSTransactional
- public Map<String, Object> update(DataModel dataModel) throws WorkFlowException {
- try {
- //处理好的数据
- Map<String, Object> result = this.updateDataList(dataModel);
- return result;
- } catch (DataException dataException) {
- throw new WorkFlowException(dataException.getMessage());
- } catch (Exception e) {
- //close
- e.printStackTrace();
- log.error("修改异常:{}", e.getMessage());
- throw new WorkFlowException(MsgCode.FA029.get(), e.getMessage());
- }
- }
- /**
- * 修改数据
- **/
- public Map<String, Object> updateDataList(DataModel dataModel) throws SQLException, DataException {
- //处理好的数据
- Map<String, Object> result = new HashMap<>(16);
- List<TableModel> tableModelList = dataModel.getTableModelList();
- List<FormAllModel> formAllModel = dataModel.getFormAllModel();
- //有表数据处理
- if (tableModelList.size() > 0) {
- DbLinkEntity link = dataModel.getLink();
- DynamicDataSourceUtil.switchToDataSource(link);
- try {
- //系统数据
- @Cleanup Connection conn = ConnUtil.getConnOrDefault(link);
- String dbType = conn.getMetaData().getDatabaseProductName().trim();
- dataModel.setDbType(dbType);
- conn.setAutoCommit(false);
- //主表
- this.updateMast(formAllModel, dataModel, conn, result);
- //子表
- this.updateTable(formAllModel, dataModel, conn, result);
- //副表
- this.updateMastTable(formAllModel, dataModel, conn, result);
- } finally {
- DynamicDataSourceUtil.clearSwitchDataSource();
- }
- } else {
- //无表数据处理
- result = this.updateAll(dataModel, formAllModel);
- }
- return result;
- }
- /**
- * 子表数据
- **/
- private void updateTable(List<FormAllModel> formAllModel, DataModel dataModel, Connection conn, Map<String, Object> result) throws SQLException {
- Boolean onlyUpdate = dataModel.getOnlyUpdate();
- Boolean logicalDelete = dataModel.getLogicalDelete();
- List<TableModel> tableModelList = dataModel.getTableModelList();
- Map<String, Object> dataNewMap = dataModel.getDataNewMap();
- Map<String, Object> oldMainData = dataModel.getOldMainData();
- if (MapUtils.isEmpty(oldMainData)) {
- return;
- }
- boolean autoIncrement = Objects.equals(dataModel.getPrimaryKeyPolicy(), 2);
- String flowId = "";
- if (dataNewMap.get(FlowFormConstant.FLOWID) != null && StringUtil.isNotEmpty(dataNewMap.get(FlowFormConstant.FLOWID).toString())) {
- flowId = dataNewMap.get(FlowFormConstant.FLOWID).toString();
- }
- //子表
- List<FormAllModel> tableForm = formAllModel.stream().filter(t -> FormEnum.table.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList());
- for (FormAllModel itemModel : tableForm) {
- FormColumnTableModel childModel = itemModel.getChildList();
- if (childModel.getDisabled()) continue;
- String key = childModel.getTableModel();
- String tableName = childModel.getTableName();
- //子表数据
- List<Map<String, Object>> chidList = dataNewMap.get(key) != null ? (List<Map<String, Object>>) dataNewMap.get(key) : new ArrayList<>();
- List<FormColumnModel> formColumnModels = childModel.getChildList().stream().filter(g -> StringUtil.isNotEmpty(g.getFieLdsModel().getVModel())).collect(Collectors.toList());
- // if (CollectionUtils.isEmpty(formColumnModels)) continue;
- if (Objects.equals(childModel.getIsNumLimit(), true) && chidList.size() > childModel.getNumLimit()) {
- throw new DataException(MsgCode.VS033.get(childModel.getLabel()));
- }
- //子表主键
- TableModel tableModel = tableModelList.stream().filter(k -> k.getTable().equals(tableName)).findFirst().orElse(null);
- String table = tableModel.getTable();
- SqlTable sqlTable = SqlTable.of(table);
- String childPrimary = this.getKey(tableModel, dataModel.getDbType());
- //子表表外键字段
- String foreignKey = tableModel.getTableField();
- TableFields foreignField = tableModel.getFields().stream().filter(t -> t.getField().equalsIgnoreCase(foreignKey)).findFirst().orElse(null);
- if (foreignField == null) {
- throw new SQLException(MsgCode.COD001.get());
- }
- //主表关联字段
- Object foreignValue = dataNewMap.get(tableModel.getRelationField());
- Object oldForeignValue = oldMainData.get(tableModel.getRelationField());
- if (VisualConst.DB_INT_ALL.contains(foreignField.getDataType())) {
- foreignValue = Long.parseLong(String.valueOf(foreignValue));
- oldForeignValue = Long.parseLong(String.valueOf(oldForeignValue));
- }
- //查询旧的子表数据
- SelectStatementProvider render = SqlBuilder.select(sqlTable.column(childPrimary))
- .from(sqlTable)
- .where(sqlTable.column(foreignKey), SqlBuilder.isEqualTo(oldForeignValue))
- .build().render(RenderingStrategies.MYBATIS3);
- List<Object> childIdList = flowFormDataMapper.selectManyMappedRows(render).stream().map(t -> new CaseInsensitiveMap(t).get(childPrimary)).collect(Collectors.toList());
- List<Object> formDataIdList = chidList.stream().filter(t -> new CaseInsensitiveMap(t).containsKey(childPrimary)).map(t -> new CaseInsensitiveMap(t).get(childPrimary)).collect(Collectors.toList());
- List<Object> deleteList = childIdList.stream().filter(t -> {
- List<String> jsonToList = JsonUtil.getJsonToList(formDataIdList, String.class);
- if (!jsonToList.contains(String.valueOf(t))) {
- return true;
- }
- return false;
- }).collect(Collectors.toList());
- if (CollectionUtils.isNotEmpty(deleteList) && !onlyUpdate) {//删除子表id数据
- //是否开启逻辑删除
- if (logicalDelete) {
- UpdateDSL<UpdateModel> updateModelUpdateDSL = SqlBuilder.update(sqlTable);
- updateModelUpdateDSL.set(sqlTable.column(TableFeildsEnum.DELETEMARK.getField())).equalTo(1);
- updateModelUpdateDSL.set(sqlTable.column(TableFeildsEnum.DELETETIME.getField())).equalTo(new Date());
- updateModelUpdateDSL.set(sqlTable.column(TableFeildsEnum.DELETEUSERID.getField())).equalTo(UserProvider.getUser().getUserId());
- UpdateStatementProvider updateRender = updateModelUpdateDSL
- .where(sqlTable.column(childPrimary), SqlBuilder.isIn(deleteList))
- .build().render(RenderingStrategies.MYBATIS3);
- flowFormDataMapper.update(updateRender);
- } else {
- DeleteStatementProvider deleteRender = SqlBuilder.deleteFrom(sqlTable)
- .where(sqlTable.column(childPrimary), SqlBuilder.isIn(deleteList))
- .build().render(RenderingStrategies.MYBATIS3);
- flowFormDataMapper.delete(deleteRender);
- }
- }
- for (Map<String, Object> objectMap : chidList) {
- objectMap = new CaseInsensitiveMap(objectMap);
- boolean isUpdate = false;
- if (CollectionUtil.isNotEmpty(childIdList)) {
- List<String> jsonToList = JsonUtil.getJsonToList(childIdList, String.class);
- if (objectMap.get(childPrimary) != null && jsonToList.contains(String.valueOf(objectMap.get(childPrimary)))) {
- isUpdate = true;
- }
- }
- if (StringUtil.isNotEmpty(flowId)) {
- objectMap.put(FlowFormConstant.FLOWID, flowId);
- }
- GeneralInsertDSL generalInsertDSL = SqlBuilder.insertInto(sqlTable).set(sqlTable.column(foreignKey)).toValue(foreignValue);
- UpdateDSL<UpdateModel> updateModelUpdateDSL = SqlBuilder.update(sqlTable).set(sqlTable.column(foreignKey)).equalTo(foreignValue);
- for (FormColumnModel column : formColumnModels) {
- FieLdsModel fieLdsModel = column.getFieLdsModel();
- String childKey = fieLdsModel.getVModel();
- String jnpfkey = fieLdsModel.getConfig().getJnpfKey();
- Object data = objectMap.get(childKey);
- String fieldKey = fieLdsModel.getConfig().getParentVModel() + "-" + childKey;
- if (foreignKey.equalsIgnoreCase(childKey)) {
- continue;
- }
- //流程表单权限
- if (CollectionUtils.isNotEmpty(dataModel.getFlowFormOperates())) {
- boolean hasOperate = isHasOperate(dataModel, fieldKey);
- if (!hasOperate) {
- continue;
- }
- } else if (dataModel.getNeedPermission()) {
- if (CollectionUtil.isNotEmpty(dataModel.getFormPerList())) {
- if (!dataModel.getFormPerList().contains(fieldKey)) {
- continue;
- }
- } else {
- continue;
- }
- }
- if (isUpdate) {
- if (JnpfKeyConsts.CURRORGANIZE.equals(jnpfkey) || JnpfKeyConsts.CURRPOSITION.equals(jnpfkey)
- || JnpfKeyConsts.CREATETIME.equals(jnpfkey) || JnpfKeyConsts.CREATEUSER.equals(jnpfkey)) {
- continue;
- }
- } else {
- if (JnpfKeyConsts.MODIFYUSER.equals(jnpfkey) || JnpfKeyConsts.MODIFYTIME.equals(jnpfkey)) {
- continue;
- }
- }
- //处理系统自动生成
- data = this.update(fieLdsModel, data, true, objectMap.get(childPrimary) == null);
- data = visualBillUtil.getBillNumber(dataModel.getVisualId(), fieLdsModel, objectMap, data);
- getDSL(sqlTable, null, generalInsertDSL, fieLdsModel.getFormat(), childKey, data);
- getDSL(sqlTable, updateModelUpdateDSL, null, fieLdsModel.getFormat(), childKey, data);
- }
- if (isUpdate) {//修改
- updateModelUpdateDSL.where(sqlTable.column(childPrimary), SqlBuilder.isEqualTo(objectMap.get(childPrimary)));
- UpdateStatementProvider render1 = updateModelUpdateDSL.build().render(RenderingStrategies.MYBATIS3);
- flowFormDataMapper.update(render1);
- } else {//新增
- //添加主键值和外键值
- if (!autoIncrement) {
- generalInsertDSL = generalInsertDSL.set(sqlTable.column(childPrimary)).toValue(RandomUtil.uuId());
- }
- //租户信息
- addTenantId(generalInsertDSL, sqlTable);
- GeneralInsertStatementProvider insertRender = generalInsertDSL.build().render(RenderingStrategies.MYBATIS3);
- flowFormDataMapper.generalInsert(insertRender);
- }
- }
- }
- }
- /**
- * 副表数据
- **/
- private void updateMastTable(List<FormAllModel> formAllModel, DataModel dataModel, Connection conn, Map<String, Object> result) throws SQLException {
- List<TableModel> tableModelList = dataModel.getTableModelList();
- Map<String, Object> dataNewMap = dataModel.getDataNewMap();
- Map<String, Object> oldMainData = dataModel.getOldMainData();
- if (MapUtils.isEmpty(oldMainData)) {
- return;
- }
- //副表
- Map<String, List<FormAllModel>> mastTableAll = formAllModel.stream().filter(t -> FormEnum.mastTable.getMessage().equals(t.getJnpfKey())).collect(Collectors.groupingBy(e -> e.getFormMastTableModel().getTable()));
- for (String key : mastTableAll.keySet()) {
- List<FormAllModel> masTableList = mastTableAll.get(key);
- //副表
- Optional<TableModel> first = tableModelList.stream().filter(t -> t.getTable().equals(key)).findFirst();
- if (!first.isPresent()) {
- throw new SQLException(MsgCode.COD001.get());
- }
- TableModel tableModel = first.get();
- String tableModelTable = tableModel.getTable();
- SqlTable sqlTable = SqlTable.of(tableModelTable);
- String childKeyName = this.getKey(tableModel, dataModel.getDbType());
- //副表外键字段
- String foreignKey = tableModel.getTableField();
- TableFields foreignField = tableModel.getFields().stream().filter(t -> t.getField().equalsIgnoreCase(foreignKey)).findFirst().orElse(null);
- if (foreignField == null) {
- throw new SQLException(MsgCode.COD001.get());
- }
- //主表关联字段
- Object foreignValue = dataNewMap.get(tableModel.getRelationField());
- Object oldForeignValue = oldMainData.get(tableModel.getRelationField());
- if (VisualConst.DB_INT_ALL.contains(foreignField.getDataType())) {
- foreignValue = Long.parseLong(String.valueOf(foreignValue));
- oldForeignValue = Long.parseLong(String.valueOf(oldForeignValue));
- }
- UpdateDSL<UpdateModel> updateModelUpdateDSL = SqlBuilder.update(sqlTable).set(sqlTable.column(foreignKey)).equalTo(foreignValue);
- for (FormAllModel model : masTableList) {
- FormMastTableModel formMastTableModel = model.getFormMastTableModel();
- FormColumnModel mastTable = formMastTableModel.getMastTable();
- FieLdsModel fieLdsModel = mastTable.getFieLdsModel();
- String mostTableKey = fieLdsModel.getVModel();
- String jnpfkey = fieLdsModel.getConfig().getJnpfKey();
- Object data = dataNewMap.get(mostTableKey);
- String field = formMastTableModel.getField();
- //外键值写入不覆盖
- if (foreignKey.equalsIgnoreCase(field)) {
- continue;
- }
- //流程表单权限
- if (CollectionUtils.isNotEmpty(dataModel.getFlowFormOperates())) {
- boolean hasOperate = isHasOperate(dataModel, mostTableKey);
- if (!hasOperate) {
- continue;
- }
- } else if (dataModel.getNeedPermission()) {
- if (CollectionUtil.isNotEmpty(dataModel.getFormPerList())) {
- if (!dataModel.getFormPerList().contains(mostTableKey)) {
- continue;
- }
- } else {
- continue;
- }
- }
- if (JnpfKeyConsts.CURRORGANIZE.equals(jnpfkey) || JnpfKeyConsts.CURRPOSITION.equals(jnpfkey)
- || JnpfKeyConsts.CREATETIME.equals(jnpfkey) || JnpfKeyConsts.CREATEUSER.equals(jnpfkey)) {
- continue;
- }
- //处理系统自动生成
- data = this.update(fieLdsModel, data, true, false);
- data = visualBillUtil.getBillNumber(dataModel.getVisualId(), fieLdsModel, dataNewMap, data);
- getDSL(sqlTable, updateModelUpdateDSL, null, fieLdsModel.getFormat(), field, data);
- }
- UpdateStatementProvider updateStatementProvider = updateModelUpdateDSL
- .where(sqlTable.column(foreignKey), SqlBuilder.isEqualTo(oldForeignValue))
- .build().render(RenderingStrategies.MYBATIS3);
- flowFormDataMapper.update(updateStatementProvider);
- }
- }
- /**
- * 主表数据
- **/
- private void updateMast(List<FormAllModel> formAllModel, DataModel dataModel, Connection conn, Map<String, Object> result) throws SQLException {
- List<TableModel> tableModelList = dataModel.getTableModelList();
- Map<String, Object> dataNewMap = dataModel.getDataNewMap();
- List<FormAllModel> mastForm = formAllModel.stream().filter(t -> FormEnum.mast.getMessage().equals(t.getJnpfKey())).filter(
- t -> StringUtil.isNotEmpty(t.getFormColumnModel().getFieLdsModel().getVModel())).collect(Collectors.toList());
- Optional<TableModel> first = tableModelList.stream().filter(t -> "1".equals(t.getTypeId())).findFirst();
- if (!first.isPresent()) {
- throw new SQLException(MsgCode.COD001.get());
- }
- TableModel tableModel = first.get();
- String mastTableName = tableModel.getTable();
- SqlTable sqlTable = SqlTable.of(mastTableName);
- TableFields keyFieldModel = tableModel.getFields().stream().filter(t -> Objects.equals(t.getPrimaryKey(), 1)
- && !t.getField().toLowerCase().contains(TableFeildsEnum.TENANTID.getField())).findFirst().orElse(null);
- if (keyFieldModel == null) {
- throw new SQLException(MsgCode.COD001.get());
- }
- String keyName = keyFieldModel.getField();
- //设置实际主键id
- Object mainId = dataModel.getMainId();
- if (VisualConst.DB_INT_ALL.contains(keyFieldModel.getDataType().toLowerCase())) {
- mainId = Long.parseLong(dataModel.getMainId());
- }
- dataNewMap.put(keyName, mainId);
- //查询旧的主表数据(用于确定修改时外键字段信息)
- SelectStatementProvider render = SqlBuilder.select(sqlTable.allColumns())
- .from(sqlTable)
- .where(sqlTable.column(keyName), SqlBuilder.isEqualTo(mainId))
- .build().render(RenderingStrategies.MYBATIS3);
- List<Map<String, Object>> maps = flowFormDataMapper.selectManyMappedRows(render);
- if (CollectionUtils.isEmpty(maps)) {
- return;
- }
- dataModel.setOldMainData(maps.get(0));
- UpdateDSL<UpdateModel> updateModelUpdateDSL = SqlBuilder.update(sqlTable);
- int num = 0;
- for (FormAllModel model : mastForm) {
- FieLdsModel fieLdsModel = model.getFormColumnModel().getFieLdsModel();
- String jnpfkey = fieLdsModel.getConfig().getJnpfKey();
- String field = fieLdsModel.getVModel();
- Object data = dataNewMap.get(field);
- //流程表单权限
- if (CollectionUtils.isNotEmpty(dataModel.getFlowFormOperates())) {
- boolean hasOperate = isHasOperate(dataModel, field);
- if (!hasOperate) {
- continue;
- }
- } else if (dataModel.getNeedPermission()) {
- if (CollectionUtil.isNotEmpty(dataModel.getFormPerList())) {
- if (!dataModel.getFormPerList().contains(field)) {
- continue;
- }
- } else {
- continue;
- }
- }
- if (JnpfKeyConsts.CURRORGANIZE.equals(jnpfkey) || JnpfKeyConsts.CURRPOSITION.equals(jnpfkey)
- || JnpfKeyConsts.CREATETIME.equals(jnpfkey) || JnpfKeyConsts.CREATEUSER.equals(jnpfkey)) {
- continue;
- }
- //处理系统自动生成
- data = this.update(fieLdsModel, data, true, false);
- data = visualBillUtil.getBillNumber(dataModel.getVisualId(), fieLdsModel, dataNewMap, data);
- getDSL(sqlTable, updateModelUpdateDSL, null, fieLdsModel.getFormat(), field, data);
- num++;
- }
- //判断是否开启锁
- if (dataModel.getConcurrencyLock()) {
- updateModelUpdateDSL = updateModelUpdateDSL.set(sqlTable.column(TableFeildsEnum.VERSION.getField())).equalTo(dataNewMap.get(TableFeildsEnum.VERSION.getField()));
- }
- //添加流程引擎信息
- if (dataNewMap.get(FlowFormConstant.FLOWID) != null && StringUtil.isNotEmpty(dataNewMap.get(FlowFormConstant.FLOWID).toString())) {
- updateModelUpdateDSL = updateModelUpdateDSL.set(sqlTable.column(TableFeildsEnum.FLOWID.getField())).equalTo(dataNewMap.get(FlowFormConstant.FLOWID));
- }
- UpdateStatementProvider updateStatementProvider = updateModelUpdateDSL
- .where(sqlTable.column(keyName), SqlBuilder.isEqualTo(mainId))
- .build().render(RenderingStrategies.MYBATIS3);
- if (num > 0) {
- flowFormDataMapper.update(updateStatementProvider);
- }
- }
- /**
- * 修改无表数据
- **/
- private Map<String, Object> updateAll(DataModel dataModel, List<FormAllModel> formAllModel) {
- Map<String, Object> dataNewMap = dataModel.getDataNewMap();
- //处理好的数据
- Map<String, Object> result = new HashMap<>(16);
- //系统数据
- List<FormAllModel> mastForm = formAllModel.stream().filter(t -> FormEnum.mast.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList());
- List<FormAllModel> tableForm = formAllModel.stream().filter(t -> FormEnum.table.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList());
- for (String key : dataNewMap.keySet()) {
- FormAllModel model = mastForm.stream().filter(t -> key.equals(t.getFormColumnModel().getFieLdsModel().getVModel())).findFirst().orElse(null);
- if (model != null) {
- FieLdsModel fieLdsModel = model.getFormColumnModel().getFieLdsModel();
- Object data = dataNewMap.get(key);
- //处理系统自动生成
- data = this.update(fieLdsModel, data, false, false);
- result.put(key, data);
- } else {
- FormAllModel childModel = tableForm.stream().filter(t -> key.equals(t.getChildList().getTableModel())).findFirst().orElse(null);
- if (childModel != null) {
- List<Map<String, Object>> childDataMap = (List<Map<String, Object>>) dataNewMap.get(key);
- //子表处理的数据
- List<Map<String, Object>> childResult = new ArrayList<>();
- for (Map<String, Object> objectMap : childDataMap) {
- //子表单体处理的数据
- Map<String, Object> childOneResult = new HashMap<>(16);
- for (String childKey : objectMap.keySet()) {
- FormColumnModel columnModel = childModel.getChildList().getChildList().stream().filter(t -> childKey.equals(t.getFieLdsModel().getVModel())).findFirst().orElse(null);
- if (columnModel != null) {
- FieLdsModel fieLdsModel = columnModel.getFieLdsModel();
- Object data = objectMap.get(childKey);
- data = this.update(fieLdsModel, data, false, false);
- childOneResult.put(childKey, data);
- }
- }
- childResult.add(childOneResult);
- }
- result.put(key, childResult);
- }
- }
- }
- return result;
- }
- /**
- * childNeedAdd子表id为空需要生成单据规则(除子表外其他都是false)
- * 修改系统赋值
- **/
- private Object update(FieLdsModel fieLdsModel, Object dataValue, boolean isTable, boolean childNeedAdd) {
- String jnpfKey = fieLdsModel.getConfig().getJnpfKey();
- String rule = fieLdsModel.getConfig().getRule();
- String format = DateTimeFormatConstant.getFormat(fieLdsModel.getFormat());
- UserInfo user = UserProvider.getUser();
- Object value = dataValue;
- switch (jnpfKey) {
- case JnpfKeyConsts.CREATEUSER:
- value = user.getUserId();
- break;
- case JnpfKeyConsts.CREATETIME:
- value = new Date();
- break;
- case JnpfKeyConsts.CURRORGANIZE:
- case JnpfKeyConsts.CURRDEPT:
- if (user != null && CollectionUtil.isNotEmpty(user.getOrganizeIds())) {
- value = JsonUtil.getObjectToString(user.getOrganizeIds());
- }
- break;
- case JnpfKeyConsts.MODIFYTIME:
- if (!childNeedAdd) {
- value = new Date();
- }
- break;
- case JnpfKeyConsts.MODIFYUSER:
- if (!childNeedAdd) {
- value = user.getUserId();
- }
- break;
- case JnpfKeyConsts.CURRPOSITION:
- if (user != null && CollectionUtil.isNotEmpty(user.getPositionIds())) {
- value = JsonUtil.getObjectToString(user.getPositionIds());
- }
- break;
- case JnpfKeyConsts.BILLRULE:
- if (Objects.equals(fieLdsModel.getConfig().getRuleType(), 1) && (childNeedAdd || ObjectUtil.isEmpty(dataValue))) {
- try {
- value = serviceUtil.getBillNumber(rule);
- } catch (Exception e) {
- value = null;
- }
- }
- break;
- case JnpfKeyConsts.DATE:
- case JnpfKeyConsts.DATE_CALCULATE:
- if (isTable) {
- try {
- if (dataValue == null || "".equals(dataValue)) {
- return null;
- }
- if (dataValue instanceof String) {
- try {
- SimpleDateFormat formatter = new SimpleDateFormat(format);
- value = formatter.parse(dataValue.toString());
- } catch (ParseException var3) {
- return null;
- }
- } else {
- value = new Date(Long.valueOf(String.valueOf(dataValue)));
- }
- } catch (Exception e) {
- }
- }
- break;
- case JnpfKeyConsts.NUM_INPUT:
- case JnpfKeyConsts.CALCULATE:
- if (isTable) {
- try {
- value = new BigDecimal(String.valueOf(dataValue));
- } catch (Exception e) {
- }
- }
- break;
- default:
- if (isTable) {
- value = this.valueToNull(value);
- }
- break;
- }
- return value;
- }
- /**
- * 删除有表单条数据
- *
- * @param id
- * @param visualDevJsonModel
- * @return
- * @throws SQLException
- * @throws DataException
- */
- @DSTransactional
- public boolean deleteTable(String id, VisualDevJsonModel visualDevJsonModel, DbLinkEntity linkEntity) throws Exception {
- Boolean logicalDelete = visualDevJsonModel.getFormData().getLogicalDelete();
- Integer primaryKeyPolicy = visualDevJsonModel.getFormData().getPrimaryKeyPolicy();
- List<TableModel> tableModels = visualDevJsonModel.getVisualTables();
- List<FieLdsModel> list = JsonUtil.getJsonToList(visualDevJsonModel.getFormData().getFields(), FieLdsModel.class);
- RecursionForm recursionForm = new RecursionForm(list, tableModels);
- List<FormAllModel> formAllModel = new ArrayList<>();
- FormCloumnUtil.recursionForm(recursionForm, formAllModel);
- List<FormAllModel> tableForm = formAllModel.stream().filter(t -> FormEnum.table.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList());
- Map<String, Boolean> disableMap = new HashMap<>();
- for (FormAllModel allModel : tableForm) {
- disableMap.put(allModel.getChildList().getTableName(), allModel.getChildList().getDisabled());
- }
- //主表
- TableModel mainTableModel = tableModels.stream().filter(t -> "1".equals(t.getTypeId())).findFirst().orElse(null);
- String mainTable = mainTableModel.getTable();
- DynamicDataSourceUtil.switchToDataSource(linkEntity);
- try {
- @Cleanup Connection conn = ConnUtil.getConnOrDefault(linkEntity);
- String dbType = conn.getMetaData().getDatabaseProductName().trim();
- String pKeyName = this.getKey(mainTableModel, dbType);
- String flowTaskId = this.getFlowTaskId(mainTableModel, dbType);
- List<AndOrCriteriaGroup> groupList = new ArrayList<>();
- groupList.add(SqlBuilder.or(SqlTable.of(mainTable).column(flowTaskId), SqlBuilder.isEqualTo(id)));
- boolean autoIncrement = Objects.equals(primaryKeyPolicy, 2);
- Object selectId = id;
- if (autoIncrement) {
- selectId = Long.parseLong(id);
- }
- SelectStatementProvider queryMain = SqlBuilder.select(SqlTable.of(mainTable).allColumns())
- .from(SqlTable.of(mainTable))
- .where(SqlTable.of(mainTable).column(pKeyName), SqlBuilder.isEqualTo(selectId), groupList)
- .build().render(RenderingStrategies.MYBATIS3);
- Map<String, Object> mainMap = flowFormDataMapper.selectOneMappedRow(queryMain);
- if (MapUtils.isNotEmpty(mainMap)) {
- Object realId = mainMap.get(pKeyName);
- //是否开启逻辑删除
- if (logicalDelete) {
- SqlTable sqlt = SqlTable.of(mainTable);
- UpdateDSL<UpdateModel> updateModelUpdateDSL = SqlBuilder.update(sqlt);
- updateModelUpdateDSL.set(sqlt.column(TableFeildsEnum.DELETEMARK.getField())).equalTo(1);
- updateModelUpdateDSL.set(sqlt.column(TableFeildsEnum.DELETETIME.getField())).equalTo(new Date());
- updateModelUpdateDSL.set(sqlt.column(TableFeildsEnum.DELETEUSERID.getField())).equalTo(UserProvider.getUser().getUserId());
- UpdateStatementProvider mainUpdate = updateModelUpdateDSL
- .where(SqlTable.of(mainTable).column(pKeyName), SqlBuilder.isEqualTo(realId))
- .build().render(RenderingStrategies.MYBATIS3);
- flowFormDataMapper.update(mainUpdate);
- } else {
- DeleteStatementProvider mainDelete = SqlBuilder.deleteFrom(SqlTable.of(mainTable))
- .where(SqlTable.of(mainTable).column(pKeyName), SqlBuilder.isEqualTo(realId))
- .build().render(RenderingStrategies.MYBATIS3);
- flowFormDataMapper.delete(mainDelete);
- }
- if (tableModels.size() > 1) {
- //去除主表
- tableModels.remove(mainTableModel);
- for (TableModel table : tableModels) {
- if (CollectionUtil.isNotEmpty(disableMap) && disableMap.get(table.getTable()) != null && disableMap.get(table.getTable())) {
- continue;
- }
- //主表关联-字段值
- Object relationFieldValue = mainMap.get(table.getRelationField());
- //子表字段-key
- String tableField = table.getTableField();
- if (logicalDelete) {
- SqlTable sqlt = SqlTable.of(table.getTable());
- UpdateDSL<UpdateModel> updateModelUpdateDSL = SqlBuilder.update(sqlt);
- updateModelUpdateDSL.set(sqlt.column(TableFeildsEnum.DELETEMARK.getField())).equalTo(1);
- updateModelUpdateDSL.set(sqlt.column(TableFeildsEnum.DELETETIME.getField())).equalTo(new Date());
- updateModelUpdateDSL.set(sqlt.column(TableFeildsEnum.DELETEUSERID.getField())).equalTo(UserProvider.getUser().getUserId());
- UpdateStatementProvider mainUpdate = updateModelUpdateDSL
- .where(SqlTable.of(table.getTable()).column(tableField), SqlBuilder.isEqualTo(relationFieldValue))
- .build().render(RenderingStrategies.MYBATIS3);
- flowFormDataMapper.update(mainUpdate);
- } else {
- DeleteStatementProvider childDeleteProvider = SqlBuilder.deleteFrom(SqlTable.of(table.getTable()))
- .where(SqlTable.of(table.getTable()).column(tableField), SqlBuilder.isEqualTo(relationFieldValue))
- .build().render(RenderingStrategies.MYBATIS3);
- flowFormDataMapper.delete(childDeleteProvider);
- }
- }
- }
- }
- } finally {
- DynamicDataSourceUtil.clearSwitchDataSource();
- }
- return true;
- }
- /**
- * 获取锁字段信息
- *
- * @param table
- * @param linkEntity
- * @param dataMap
- * @param id
- * @return
- */
- public Boolean getVersion(String table, DbLinkEntity linkEntity, Map dataMap, Object id) {
- boolean canUpdate = true;
- try {
- DynamicDataSourceUtil.switchToDataSource(linkEntity);
- @Cleanup Connection conn = ConnUtil.getConnOrDefault(linkEntity);
- String pKeyName = this.getTableKey(conn, table);
- SqlTable sqlTable = SqlTable.of(table);
- SelectStatementProvider render = SqlBuilder.select(sqlTable.column(TableFeildsEnum.VERSION.getField()))
- .from(sqlTable)
- .where(sqlTable.column(pKeyName), SqlBuilder.isEqualTo(id))
- .and(sqlTable.column(TableFeildsEnum.VERSION.getField()), SqlBuilder.isEqualTo(dataMap.get(TableFeildsEnum.VERSION.getField())))
- .build().render(RenderingStrategies.MYBATIS3);
- int count = flowFormDataMapper.selectManyMappedRows(render).size();
- canUpdate = count > 0;
- } catch (DataException | SQLException e) {
- log.error("切换数据源异常");
- } finally {
- DynamicDataSourceUtil.clearSwitchDataSource();
- }
- return canUpdate;
- }
- /**
- * 添加sql语句
- *
- * @param
- * @return
- * @copyright 引迈信息技术有限公司
- * @date 2023/3/29
- */
- private void getDSL(SqlTable sqlTable, UpdateDSL<UpdateModel> updateModelUpdateDSL, GeneralInsertDSL generalInsertDSL,
- String format, String field, Object data) {
- boolean dataTimestamp = StringUtil.isNotEmpty(format) ? format.length() > 10 : true;
- String dateFunc = dataTimestamp ? "to_timestamp" : "to_date";
- if (data == null || StringUtil.isEmpty(data.toString())) {
- if (generalInsertDSL != null) {
- generalInsertDSL = generalInsertDSL.set(sqlTable.column(field)).toNull();
- } else {
- updateModelUpdateDSL = updateModelUpdateDSL.set(sqlTable.column(field)).equalToNull();
- }
- } else {
- if (generalInsertDSL != null) {
- generalInsertDSL = generalInsertDSL.set(sqlTable.column(field)).toValue(data);
- } else {
- updateModelUpdateDSL = updateModelUpdateDSL.set(sqlTable.column(field)).equalTo(data);
- }
- }
- }
- /**
- * 判断数据为空或空数组转换成null
- *
- * @param value
- * @return
- */
- private Object valueToNull(Object value) {
- if (value instanceof List || value instanceof String[][]) {
- List l = (List) value;
- if (l.size() > 0) {
- value = JsonUtil.getObjectToString(value);
- } else {
- value = null;
- }
- } else if (value instanceof CharSequence) {
- if (StrUtil.isEmpty((CharSequence) value) || "[]".equals(value)) {
- value = null;
- }
- }
- return value;
- }
- /**
- * 获取当前组织完整路径
- *
- * @param orgId
- * @return
- */
- public String getCurrentOrgIds(String orgId, String showLevel) {
- String orgIds = null;
- OrganizeEntity organizeEntity = serviceUtil.getOrganizeInfo(orgId);
- if (organizeEntity != null) {
- if (StringUtil.isNotEmpty(organizeEntity.getOrganizeIdTree())) {
- String[] split = organizeEntity.getOrganizeIdTree().split(",");
- orgIds = split.length > 0 ? JsonUtil.getObjectToString(Arrays.asList(split)) : null;
- }
- }
- if (!"all".equals(showLevel) && organizeEntity != null && "company".equals(organizeEntity.getCategory())) {
- orgIds = null;
- }
- return orgIds;
- }
- /**
- * 是否有流程表单权限
- *
- * @param dataModel
- * @param field
- * @return false 没有权限(需要跳过)
- */
- private boolean isHasOperate(DataModel dataModel, String field) {
- boolean hasOperate = true;
- for (Map<String, Object> item : dataModel.getFlowFormOperates()) {
- if (field.equals(item.get("id")) && (item.get("write") == null || "false".equals(item.get("write").toString()))) {
- hasOperate = false;
- }
- }
- return hasOperate;
- }
- /**
- * 添加租户信息
- *
- * @param generalInsertDSL
- * @param sqlTable
- */
- private void addTenantId(GeneralInsertDSL generalInsertDSL, SqlTable sqlTable) {
- //租户信息
- String tenantId = TenantDataSourceUtil.getTenantColumn();
- generalInsertDSL.set(sqlTable.column(TableFeildsEnum.TENANTID.getField())).toValue(tenantId);
- }
- public void saveState(VisualdevEntity visualdevEntity, String flowTaskId, Integer flowState) {
- List<TableModel> tableModels = JsonUtil.getJsonToList(visualdevEntity.getVisualTables(), TableModel.class);
- TableModel mainT = tableModels.stream().filter(t -> t.getTypeId().equals("1")).findFirst().orElse(null);
- DbLinkEntity linkEntity = serviceUtil.getDbLink(visualdevEntity.getDbLinkId());
- try {
- DynamicDataSourceUtil.switchToDataSource(linkEntity);
- SqlTable sqlt = SqlTable.of(mainT.getTable());
- UpdateDSL<UpdateModel> updateModelUpdateDSL = SqlBuilder.update(sqlt);
- updateModelUpdateDSL.set(sqlt.column(TableFeildsEnum.FLOWSTATE.getField())).equalTo(flowState);
- UpdateStatementProvider mainUpdate = updateModelUpdateDSL
- .where(SqlTable.of(mainT.getTable()).column(TableFeildsEnum.FLOWTASKID.getField()), SqlBuilder.isEqualTo(flowTaskId))
- .build().render(RenderingStrategies.MYBATIS3);
- flowFormDataMapper.update(mainUpdate);
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- DynamicDataSourceUtil.clearSwitchDataSource();
- }
- }
- }
|