2018-8-27 星期一
1.菜單管理、部門管理中id列的可見性設置問題:jquery.treegrid.extension.js ,詳情見PDF。
2.展示通知:解決關閉單項通知按鈕無效問題。
請確保使用帶有 data-dismiss="alert" data 屬性的 <button> 元素。
<!-- class="alert alert-dismissable" 可取消警告 配合按鈕-->
<div class="alert" style="padding: 0px; margin-bottom: 5px">
<div class="alert-dismissable">
<button aria-hidden="true" data-dismiss="alert" class="close" type="button">×</button>
<strong>${notice.title}</strong>
<div>${notice.content}</div>
<small pattern="yyyy-MM-dd HH:mm:ss">${notice.updatetime}</small>
<!-- 下劃線 -->
<hr class="simpleTagLabel">
</div>
</div>
2018-8-28 星期二
1.通用表格展示列生成
{title: '', field: '', visible: true, align: 'canter', valign: 'middle'},
2.產品名映射表
模塊:產品名映射表模塊基本功能實現
查看產品名映射:自定義mapper,數據從視圖ProductNameMappingTable中獲取。
添加、修改、刪除產品名映射:採用BaseMapper,與數據表ProductNameData建立對應關係。
需要注意的是:
1. 視圖中不存在主鍵這一字段,修改、刪除操作的依賴字段爲productId,使用EntityWarpper條件構造器進行操作即可。
2. 由於視圖和數據表的聯動關係在數據庫中已經存在,若插入一條數據庫中產品編號未存在的數據到視圖中,此操作無效。
3. 在產品名映射上,搜索條件整合,可通過產品編號、標準名、別名等多個字段進行視圖內的數據查詢。現階段搜索條件不存在多選,如需請參照產品基礎信息模塊。
4. 產品信息驗證邏輯遷移至添加頁面映射界面,編輯頁面中產品編號已經設置爲不可更改。
座標:ProductNameMappingController.java
/**
* @Author jiangyanfei
* @Description 產品信息檢查 -- 查詢視圖所關聯表中當前操作數據是否存在
* @Date 2018/8/28
* @Param [productNameData]
* @return boolean
**/
public boolean checkProductInfo(ProductNameData productNameData){
ProductInfo productInfo = iProductBasicInfoService.getProductInfoByProductId(productNameData.getProductID());
if (productInfo != null) {
return true;
}
return false;
}
座標:productNameMapping_edit.html
<#input id="productID" name="產品編號" underline="true" value="${productNameMapping.productID}" disabled="disabled" />
2018-8-30 星期四
1.多數據源配置問題
關於多數據源切換問題,在MultiSourceExAop中進行了聲明。
1. @DataSource註解只能用於方法,在業務方法名上添加註解,即表示爲切換數據源。
2. 多數據源切換邏輯:
//根據註解中name屬性的值,從註解中獲得數據源類型。
DataSource datasource = currentMethod.getAnnotation(DataSource.class);
if (datasource != null) {
//數據源切換
DataSourceContextHolder.setDataSourceType(datasource.name());
log.debug("設置數據源爲:" + datasource.name());
} else {
DataSourceContextHolder.setDataSourceType(mutiDataSourceProperties.getDefaultDataSourceName());
log.debug("設置數據源爲:dataSourceCurrent");
}
try {
//正常業務邏輯
return point.proceed();
} finally {
log.debug("清空數據源信息!");
DataSourceContextHolder.clearDataSourceType();
}
可以看出,在切面方法中,每次都會根據註解獲取數據源類型,並進行數據源切換。而且,無論業務邏輯是否執行,最終都會清空數據源信息。這裏指的清空,是變更爲默認數據源類型:MySQL;
3. 方法中嵌套使用多數據源:這裏的內外調用方法均添加了@DataSource註解
經過debug發現,DataSourceContextHolder中的線程爲單線程,即一次存儲單個數據源信息。
private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
在嵌套使用多數據源的場景中:存在兩種情況。
1. 外調用的數據源切換已完成後內數據源進行數據源切換。
/**
* 獲取證券交易列表
*/
@RequestMapping(value = "/list")
@ResponseBody
@DataSource(name = DSEnum.DATA_SOURCE_BIZ) //外調用
public Object list(@RequestParam(value = "condition", defaultValue = "") String condition,
@RequestParam(value = "tradingDay", defaultValue = "") String tradingDay) {
if (condition.equals("") && tradingDay.equals("")) {
return tradingStockMapper.selectPage(new Page<TradingStock>(1, 10), null);
}
//內調用
return iSecurityDealService.getTradingStockList(condition, tradingDay.replaceAll("-+",""));
}
2. 外調用的數據源切換未完成,內數據源的數據源進行切換,此時新建了一個數據庫鏈接。外調用不可正常使用。
/**
* 新增證券交易
*/
@RequestMapping(value = "/add")
@ResponseBody
@DataSource(name = DSEnum.DATA_SOURCE_BIZ) //外調用
public Object add(TradingStock tradingStock) {
//內調用
if (iProductBasicInfoService.getProductInfoByProductId(tradingStock.getProductID()) != null){
tradingStock.setOpdate(new Date());
tradingStock.setAmount((double) (tradingStock.getVolume() * tradingStock.getPrice()));
//外調用未完成業務邏輯 -- 出錯
tradingStockMapper.insert(tradingStock);
}
return super.SUCCESS_TIP;
}
4.解決方案:
涉及數據源切換的通用邏輯:ProductInfoCheck,將該方法重寫後不添加@DataSource註解,其他方法同理,當外調用已經開啓註解進行了數據源切換,內調用的方法就不應該再添加@DataSource註解。但由於該種嵌套切換數據源侷限於部分操作,因此可以採用該方法進行解決。AOP作用域爲當前切點(方法),之前提到的註釋數據源關閉時不恰當的,數據源的連接應根據所需進行開關,避免造成資源浪費。
2.多層目錄下SpringBoot掃描不到Dao層接口的問題:
SpringBoot默認的Spring容器初始化Bean加載路徑爲:與Application啓動類同級目錄下,以及同級子級目錄下。
由於構造三級菜單的緣故,目錄名層次爲三級,Spring容器掃描不到。
座標:MybatisPlusConfig.java 配置類 * 變更爲 ** 表示多級目錄
@MapperScan(basePackages = {"com.quant.qdvp.modular.**.dao", "com.quant.qdvp.common.persistence.dao"})
2018-8-31 星期五
1.add、edit表單id未標識,表單驗空出錯
Uncaught TypeError: Cannot read property 'resetForm' of undefined...
xxx_add.html、xxx_edit.html中表單id一定要標明。