一。自己本機中Oracle數據庫的安裝情況
PL/SQL連接Oracle數據庫
二。Boss幫忙部署FMC_V1.0.0項目的 步驟:
1)SVN,https://60.205.214.58/svn/FMC/branches/FMC_Aeoniamc_trunk
SVN賬號,102zhanyubiao zhanyubiao
項目名右鍵,Maven --》update Project
2)拷貝全了 D:\mavejars 下的文件
3)有些FMC項目上的錯誤排除,直接剪切再粘體以下子,Ctrl+X,Ctrl+V
4)改了settings.xml 和 <localRepository>D:\mavejars</localRepository>
改了settings_cem_v2.0.xml中的<localRepository>D:/mavejars</localRepository>以及 、和 <profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus</id>
<name>Nexus</name>
<url>D:/mavejars/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>Nexus</name>
<url>D:/mavejars/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled> </snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
5)在context.xml中添加數據源代碼。
<Resource name="jdbc/fmcDataSource"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@192.168.1.28:1521:orcl"
username="FMC_SSC"
password="FMC_SSC"
maxIdle="40"
maxWait="1200"
maxActive="200"
removeAbandoned="true"
removeAbandonedTimeout="180"
logAbandoned="true"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" />
</Context>
6)運行 http://localhost:8888
前端界面出來,按F12,就會出現前端代碼的編輯器
三。Maven部署項目
四。SVN在開發中的使用
與
五。在Eclipse中的Debug調試。
首先右擊項目選擇Debug As -- Debug on Server 或者點擊Server面板的小昆蟲圖標,啓動Debug模式。
運行web項目,進行到需要調試的地方,在執行頁面操作之前,在即將要運行的代碼中添加斷點,然後繼續執行頁面操作,
當代運行到斷點處時,Eclipse自動彈出,進入Debug模式,這時就可以按F6 進行觀察了。
幾個快捷鍵操作==》F5:Step Into:跳進當前執行的方法中F6:Step Over:跳過該行繼續執行F7:Step Return:
從方法中跳出繼續執行F8:Resume:全部運行通過,從調試狀態恢復Ctrl + R:Run to Line:運行到當前選中的行
在FMC 項目中,後臺Java代碼需要通過Context 來得到前端Ajax 傳過來的數據。而要c'ka查看到前端傳過來的數據值,
就必須使用斷點,Debug模式!
六。新建一張表,在系統框架下實現最基本的單表CRUD
總結:3個XML + 1個Service類
web.xml
jkurrentMain.xml
Main.xml,系統入口
<!-- 業務相關配置文件 -->
<import resource="process/*/jstream-action-*.xml"/>
<import resource="process/*/jstream-sjmservice-*.xml"/>
<import resource="process/*/jstream-interceptor-*.xml"/>
<!-- 接口相關配置文件 -->
<import resource="process/wsInterface/*/jstream-action-*.xml"/>
<import resource="process/wsInterface/*/jstream-sjmservice-*.xml"/>
<import resource="process/wsInterface/*/jstream-interceptor-*.xml"/>
1)jstream-action-sscWorkGroup.xml文件中的Action 。有前端的H12,network,*.ajax,在Ctrl+H搜索這個*【1個action XML】
改變,系統能夠正常跑通,前端操作的時候無法成功。
ref 指定關聯的Service類,operations 指定關聯的Service類中的某一個具體方法。
<!-- 新增-->
<action id="addSscWorkGroup6666" template="simpleTemplate" interceptors="defaultInterceptors">
<sjmservices>
<sjmservice id="action1" ref="sscWorkGroupService" operations="addSscWorkGroup"></sjmservice>
</sjmservices>
</action>
2)public class SscProperty6666Service extends BaseService {【1個Service類】 *1**********************************1*
增刪改查,方法。 【查詢比較特殊,select、setNewPageData、resultMap。。。而增刪改,用sqlMap】
public class SscWorkGroupService extends BaseService {
/**
* 分頁查詢工作組
* @param ctx
*/
public void qrySscWorkGroupPage(Context ctx) { 【通過Context 獲取前端操作所對應的信息】
logger.debug("-------------start to qrySscWorkGroupPage---------------");
logger.debug("print request data = [" + ctx.getDataMap().toString());
try {
UserInfo userInfo = this.getUserInfo(); // 當前認證用戶信息
// 封裝頁面查詢參數
Map<String, Object> paraMap = ctx.getDataMap();
paraMap.put("corpId", userInfo.getCorpid()); 【查詢比較特殊,select、setNewPageData、resultMap。而增改刪用sqlMap】
// 執行查詢操作
this.setNewPageData("ssc6666.qrySscGroupPage", ctx, paraMap); 【系統能跑通,在點擊共享中心==》工作組時候彈出==》分頁查詢工作組失敗。1個。操作時後臺報錯,Mapped Statements collection does not contain value for ssc6666.qrySscGroupPage。若是sql.xml中的<mapper namespace="ssc666">則是多個】
} catch(Exception e) {
throw new SscModuleException(SscModuleErrorCode.SSC_QRYSSCWORKGROUPPAGE_ERROR_CODE, "分頁查詢工作組信息失敗!");
}
}
3)ssc_SqlMap.xml,【1個sql XML(若爲某板則是Java方法實現具體的功能) 】 *2**********************************2*
Main.xml==》db.xml==》sqlMap.xml
<mapper namespace="ssc666">【存放Service中需要調用的SQL方法。系統能跑通,在點擊共享中心==》工作組時候彈出==》分頁查詢工作組失敗。和 ==》我的工作臺==》查詢工作組成員失敗。等多個】
Service中方法的方法體中,所調用的具體的實現方法,若是CRUD則爲SQL語句,若爲某板則爲實現方法
數據庫中字段、類的封裝,具體的SQL語句
<!-- 工作組信息Map -->
<resultMap id="WorkGroup_resultMap6666" type="hashmap">【select查詢操作要用到。系統跑不通,Could not find result map ssc.WorkGroup_resultMap,編譯的時候是在找select調用時】
<!-- 工作組ID -->
<id column="ID" property="id"></id>
<!-- 企業ID -->
<result column="CORPID" property="corpId"></result>
<!-- 工作組名 -->
<result column="NAME" property="name"></result>
<!-- 描述 -->
<result column="DESCRIPTION" property="description"></result>
<select id="qrySscGroupPage" resultMap="WorkGroup_resultMap"> 【select調用時】
<!-- 分頁查詢用戶組信息 -->
<select id="qrySscGroupPage" resultMap="WorkGroup_resultMap6666">【select查詢在用。系統跑不通,Could not find result map ssc.WorkGroup_resultMap6666,編譯調用在select時】
SELECT ID,CORPID,NAME,DESCRIPTION,BILLCOUNTONCE,BILLCOUNTLIMIT,ENABLE,
TO_CHAR(CREATETIME,'YYYY-MM-DD HH24:MI:SS') CREATETIME,
TO_CHAR(MODIFYTIME,'YYYY-MM-DD HH24:MI:SS') MODIFYTIME
FROM T_SSC_SYS_GROUP
<where>
CORPID=#{corpId}
<if test="name != null and name != ''">
AND NAME LIKE '%'||#{name}||'%'
</if>
<if test="description != null and description != ''">
AND DESCRIPTION LIKE '%'||#{description}||'%'
</if>
4)jstream-sjmservice-ssc.xml文件中,【1個service XML】
改變,系統無法跑通,No bean named 'sscWorkGroupService' is defined
改變,系統無法跑通,No bean named 'sscWorkGroupService' is defined
<!-- 工作組 -->
<sjmservice id="sscWorkGroupService6666" class="com.stream.ssc.SscWorkGroupService"></sjmservice>
七。二次研發,實現新需求
個人相關==》已辦任務==》新加兩個結束按鈕
TFmcWfPersontask_SqlMap.xml文件下
<!-- 查詢個人已完成的任務列表 -->
<select id="selectCompleteTasksWithPersonal" resultMap="billWorkFlow.queryTaskAgentMap">
SELECT
MM.MID,
MM.BILLNO,
MM.CREATERID,
MM.NAME,
MM.TASKID,
MM.COMPLETETIME,
MM.EXECID,
MM.NODEID,
MM.NODENAME,
MM.PROCESSID,
MM.PROCESSNAME,
MM.CORPID,
MM.PROCESSINST,
MM.TYPEID,
MM.OWNER,
MM.ASSIGNEE,
MM.loginName,
MM.DEPTNAME,
MM.AMOUNT,
MM.CREATETIME,
MM.billName,
MM.showType,
MM.attachmentCount,
MM.remark,
MM.TASKSOURCE,
MM.memo
FROM
( SELECT M.ID AS mId,
M.BILLNO AS billNo,
M.CREATER CREATERID,
E.NAME AS name,
R.TASKID AS taskId,
TO_CHAR(R.COMPLETETIME, 'yyyy-MM-dd HH24:mi:ss') AS completeTime,
R.Executionid as execId,
A.SHOWTYPE as nodeName,
R.PROCESSDEFINITIONID AS processId,
B.PROCESSNAME AS processName,
M.CORPID AS corpId,
R.PROCESSINSTANCEID AS processInst,
M.BILLTYPE AS typeId,
R.OWNER,
R.ASSIGNEE,
#{assignee} loginName,
M.CREATERDEPT AS deptName,
R.NODEID as nodeId,
TO_CHAR(M.originalcurrencysum,'FM99999999990.0099') AS amount,
TO_CHAR(R.CREATETIME, 'yyyy-MM-dd HH24:mi:ss') AS createTime,
BI.BILLNAME AS billName ,
A.SHOWTYPE AS showType,
nvl(M.attachmentCount, 0) as attachmentCount,
M.remark,
R.TASKSOURCE,
M.REMARK MEMO
FROM T_FMC_BILL_MAINDATA M
LEFT JOIN T_FMC_WF_PERSONTASK R ON M.BILLNO = R.BUSINESSKEY
LEFT JOIN T_FMC_SYS_EMPLOYEE E ON E.ID = M.CREATER
LEFT JOIN T_FMC_WF_ATTRBUT A ON A.NODEID = R.NODEID AND A.PROCESSDEFINITIONID = R.PROCESSDEFINITIONID
LEFT JOIN T_FMC_WF_BASEMESSAGE B ON B.PROCESSDEFINITIONID = R.PROCESSDEFINITIONID
LEFT JOIN T_FMC_BILL_BILLINFO BI ON BI.ID = M.BILLTYPE
WHERE R.STATUS != 'active' AND NVL(R.ISJUMP, '1') != '0'
AND (R.ASSIGNEE = #{assignee} OR R.OWNER=#{assignee})
AND M.CORPID = #{corpId}
<!-- AND R.COMPLETETIME = ( -->
<!-- SELECT MAX(PK.COMPLETETIME) FROM T_FMC_WF_PERSONTASK PK -->
<!-- WHERE PK.NODEID = R.NODEID AND PK.PROCESSDEFINITIONID = R.PROCESSDEFINITIONID -->
<!-- AND PK.BUSINESSKEY = R.BUSINESSKEY -->
<!-- ) -->
AND NOT EXISTS (SELECT 1 FROM T_FMC_WF_PERSONTASK K WHERE K.NODEID = R.NODEID AND K.PROCESSDEFINITIONID = R.PROCESSDEFINITIONID
AND K.BUSINESSKEY = R.BUSINESSKEY AND K.ASSIGNEE = R.ASSIGNEE AND K.STATUS IN ('active'))
) MM
<where>
<if test="billNo != null and billNo != ''">
AND MM.BILLNO LIKE '%'||#{billNo}||'%'
</if>
<if test="name != null and name != ''">
AND MM.NAME LIKE '%'||#{name}||'%'
</if>
<if test="billAmountBegin != null and billAmountBegin != ''">
AND MM.AMOUNT <![CDATA[>=]]> #{billAmountBegin}
</if>
<if test="billAmountEnd != null and billAmountEnd != ''">
AND MM.AMOUNT <![CDATA[<=]]> #{billAmountEnd}
</if>
<if test="createTimeBegin != null and createTimeBegin != ''">
AND TO_CHAR(TO_DATE(MM.CREATETIME),'YYYY-MM-DD') <![CDATA[>=]]> #{createTimeBegin}
</if>
<if test="createTimeEnd != null and createTimeEnd != ''">
AND TO_CHAR(TO_DATE(MM.CREATETIME),'YYYY-MM-DD') <![CDATA[<=]]> #{createTimeEnd}
</if>
<if test="billName != null and billName != ''">
AND MM.billName LIKE '%'||#{billName}||'%'
</if>
<if test="showType != null and showType != ''">
AND MM.showType LIKE '%'||#{showType}||'%'
</if>
<if test="memo != null and memo != ''">
AND MM.MEMO LIKE '%'||#{memo}||'%'
</if>
<if test="orderByCause != null and orderByCause != ''">
ORDER BY ${orderByCause}
</if>
<if test="orderByCause == null or orderByCause == ''">
ORDER BY MM.COMPLETETIME DESC
</if>
</where>
</select>
八。二次研發,實現新需求【【因爲好多方法是封裝好的模板,在各個地方會存在多次調用,所以最好不要去改,而是仿照着方法模板,自己另外寫出新的具體方法來實現具體的功能】】
付管理==》網銀支付==》導出
1)PaymentBaseService.java文件下
/** ******************** 網銀支付列表導出 begin**************************************************************************************************** **/
/**
* 功能:網銀支付列表導出
* @Title: exportPaymentFundPayList
* @Description:
* @param
* @return void
* @author zhulong
* @throws Exception
* @date 2018年2月6日
*/
public void exportPaymentFundPayList(Context context) throws Exception {
try {
/**查詢結果集**/
List<Map<String, Object>> paymentFundPayList = new ArrayList<Map<String,Object>>();
/**查詢條件**/
Map<String, Object> conditionMap = new HashMap<String, Object>();
conditionMap.put("corpId", this.getUserInfo().getCorpid());
conditionMap.put("empId", this.getUserInfo().getEmployeeId());
//根據查詢條件導出(跟當前查詢數據一致)
conditionMap.putAll(context.getDataMap());
paymentFundPayList = sqlMap.queryForList("PaymentSqlMap.exportPaymentFundPayDataAgribank", conditionMap);
//導出的文件名
String fileName = "中國農業銀行離線制單導入文件.xls";
//自己寫的導出
Workbook workbook = ExportExcelUtil.exportAgribank(fileName, paymentFundPayList);
/** 獲得response對象**/
HttpServletResponse response = (HttpServletResponse) context.getChannelContext().getResponse();
/** 設置編碼格式**/
response.setCharacterEncoding("UTF-8");
response.setContentType("application/x-download");
fileName = URLEncoder.encode(fileName, "UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
/** 流輸出**/
OutputStream out = response.getOutputStream();
workbook.write(out);
out.close();
} catch (Exception e) {
throw e;
}
}
private LinkedHashMap<String, String> getTitles() {
LinkedHashMap<String, String> titles = new LinkedHashMap<String, String>();
titles.put("billNo", "單據編號");
titles.put("billName", "單據名稱");
titles.put("reqOrgName", "機構名稱");
titles.put("recAccountNo", "收款方賬號");
titles.put("recAccountName", "收款方戶名");
titles.put("recBankName", "收款行名稱");
titles.put("bankPayType", "公私標識");
titles.put("amount", "金額(元)");
titles.put("pushDate", "發送時間");
titles.put("payDate", "付款時間");
titles.put("payStatus_name", "支付狀態");
titles.put("payMethod", "支付方式");
return titles;
}
/** ******************** 網銀支付列表導出end **************************************************************************************************** **/
2)ExportExcelUtil.java文件
/** ******************** 網銀支付列表導出農業銀行離線文件Begin **************************************************************************************************** **/
/**
* 導出List<Map<String, Object>>數據到Excel中
* @param fileName 文件名,以.xls或.xlsx結尾,以區分是Excel2003或更高版本
* @param titles 第一行標題,key是表頭代碼(取數據時用到),value是表頭名稱, LinkedHashMap爲了保證順序
* @param dataList 數據
* @return
*/
public static Workbook exportAgribank(String fileName, List<Map<String, Object>> paymentFundPayList) {
return exportAgribank(fileName, paymentFundPayList, "yyyy-MM-dd HH:mm:ss");
}
/**
* 導出List<Map<String, Object>>數據到Excel中
* @param fileName 文件名,以.xls或.xlsx結尾,以區分是Excel2003或更高版本
* @param titles 第一行標題,key是表頭代碼(取數據時用到),value是表頭名稱, LinkedHashMap爲了保證順序
* @param dataList 數據
* @param pattern 日期格式
* @return
*/
public static Workbook exportAgribank(String fileName, List<Map<String, Object>> paymentFundPayList, String pattern) {
// 第一步,創建一個workbook,對應一個Excel文件
Workbook workbook = ExcelFileUtil.getFormatWorkbook(fileName);
// 第二步,在webbook中添加一個sheet,對應Excel文件中的sheet
int indexDot = fileName.indexOf('.');
String sheetName = indexDot == -1 ? fileName : fileName.substring(0, indexDot);
Sheet sheet = workbook.createSheet(sheetName);
// 第三步,創建標題行一
//定義格式
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
Row row0 = sheet.createRow(0);
row0.createCell(5).setCellValue("中國農業銀行離線制單導入文件");//放置在第五個單元格,實現居中效果
// 第四步,創建標題行二
Row row1 = sheet.createRow(1);
row1.createCell(0).setCellValue("編號");
row1.createCell(1).setCellValue("付款方賬戶類型");
row1.createCell(2).setCellValue("付款方賬號");
row1.createCell(3).setCellValue("收款方賬號");
row1.createCell(4).setCellValue("收款方戶名");
row1.createCell(5).setCellValue("是否農行賬戶");
row1.createCell(6).setCellValue("開戶銀行(行別)");
row1.createCell(7).setCellValue("開戶大額行號");
row1.createCell(8).setCellValue("開戶行支行名稱");
row1.createCell(9).setCellValue("金額");
row1.createCell(10).setCellValue("預約日期");
row1.createCell(11).setCellValue("用途(附言)");
// 第五步,創建數據行
Row row2 = sheet.createRow(2);
int i = 1;
if(paymentFundPayList != null) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
for(Map<String, Object> data : paymentFundPayList) {
row2 = sheet.createRow(++i);
Cell cell0 = row2.createCell(0);//第一列
Object value0 = data.get("billNo");
if(value0 != null) {
if (value0 instanceof Double) {
cell0.setCellValue((Double)value0);
} else if (value0 instanceof Date) {
cell0.setCellValue(sdf.format((Date)value0));
} else {
cell0.setCellValue(value0.toString());
}
}
Cell cell1 = row2.createCell(1);//第二列cell1 爲下拉框,POI導出Excel中的單元格設置成下拉框
cell1.setCellValue("1"); //默認值
String[] textlist = { "0", "1", "2", "3"};
//設置第二列的1-最後一行 爲下拉列表
CellRangeAddressList regions = new CellRangeAddressList(2, paymentFundPayList.size(), 1, 1);
//創建下拉列表數據
DVConstraint constraint = DVConstraint.createExplicitListConstraint(textlist);
//綁定
HSSFDataValidation dataValidation = new HSSFDataValidation(regions, constraint);
sheet.addValidationData(dataValidation);
Cell cell2 = row2.createCell(2);//第三列付款方賬戶
Object value2 = data.get("payAccountNo");
if(value2 == null){
cell2.setCellValue("34646001040004242");//默認值
}else {
if (value2 instanceof Double) {
cell2.setCellValue((Double)value2);
} else if (value2 instanceof Date) {
cell2.setCellValue(sdf.format((Date)value2));
} else {
cell2.setCellValue(value2.toString());
}
}
Cell cell3 = row2.createCell(3);//第四列收款方賬戶
Object value3 = data.get("recAccountNo");
if(value3 != null) {
if (value3 instanceof Double) {
cell3.setCellValue((Double)value3);
} else if (value3 instanceof Date) {
cell3.setCellValue(sdf.format((Date)value3));
} else {
cell3.setCellValue(value3.toString());
}
}
Cell cell4 = row2.createCell(4);//第五列收款方姓名
Object value4 = data.get("recAccountName");
if(value4 != null) {
if (value4 instanceof Double) {
cell4.setCellValue((Double)value4);
} else if (value4 instanceof Date) {
cell4.setCellValue(sdf.format((Date)value4));
} else {
cell4.setCellValue(value4.toString());
}
}
Cell cell5 = row2.createCell(5);
Object value5 = data.get("recBankName");//加判斷
String v5 = value5.toString();
if(v5 != null) {
if (v5.indexOf("農行")!=-1 || v5.indexOf("農業銀行")!=-1 || v5.indexOf("中國農業銀行")!=-1){
//"只要test.indexOf('This')返回的值不是-1說明test字符串中包含字符串'農行',相反如果包含返回的值必定是-1"
cell5.setCellValue("是");
}else{
cell5.setCellValue("否");
}
}
Cell cell6 = row2.createCell(6);
Object value6 = data.get("recBankTypeName");
if(value6 != null) {
if (value6 instanceof Double) {
cell6.setCellValue((Double)value6);
} else if (value6 instanceof Date) {
cell6.setCellValue(sdf.format((Date)value6));
} else {
cell6.setCellValue(value6.toString());
}
}
Cell cell7 = row2.createCell(7);
Object value7 = data.get("recBankTypeCode");
if(value7 != null) {
if (value7 instanceof Double) {
cell7.setCellValue((Double)value7);
} else if (value7 instanceof Date) {
cell7.setCellValue(sdf.format((Date)value7));
} else {
cell7.setCellValue(value7.toString());
}
}
Cell cell8 = row2.createCell(8);
Object value8 = data.get("recBankName");
if(value8 != null) {
if (value8 instanceof Double) {
cell8.setCellValue((Double)value8);
} else if (value8 instanceof Date) {
cell8.setCellValue(sdf.format((Date)value8));
} else {
cell8.setCellValue(value8.toString());
}
}
Cell cell9 = row2.createCell(9);
Object value9 = data.get("amount");
if(value9 != null) {
if (value9 instanceof Double) {
cell9.setCellValue((Double)value9);
} else if (value9 instanceof Date) {
cell9.setCellValue(sdf.format((Date)value9));
} else {
cell9.setCellValue(value9.toString());
}
}
Cell cell10 = row2.createCell(10);
Object value10 = data.get("date"); //預約日期 爲空
if(value10 != null) {
if (value10 instanceof Double) {
cell8.setCellValue((Double)value10);
} else if (value10 instanceof Date) {
cell10.setCellValue(sdf.format((Date)value10));
} else {
cell10.setCellValue(value10.toString());
}
}
Cell cell11 = row2.createCell(11);
Object value11 = data.get("porpose");
if(value11 != null) {
if (value11 instanceof Double) {
cell11.setCellValue((Double)value11);
} else if (value11 instanceof Date) {
cell11.setCellValue(sdf.format((Date)value11));
} else {
cell11.setCellValue(value11.toString());
}
}
}
}
return workbook;
}
/** ******************** 網銀支付列表導出農業銀行離線文件end **************************************************************************************************** **/
3)Payment_SqlMap.xml 文件
<resultMap id="FundDataQry_resultMapAgribank" type="hashmap" extends="FundData_resultMap">
<result column="DATE" property="date"/>
</resultMap>
<!-- 導出支付數據 -->
<select id="exportPaymentFundPayDataAgribank" resultMap="FundDataQry_resultMapAgribank">
SELECT FP.BILLNO, FP.PAYACCOUNTNO, FP.RECACCOUNTNO, FP.RECACCOUNTNAME, FP.RECBANKNAME, FP.RECBANKTYPENAME, FP.RECBANKTYPECODE, FP.RECBANKNAME, FP.AMOUNT,
FP.PURPOSE
FROM T_FMC_FUND_PAYMENT FP
<where>
FP.CORPID = #{corpId}
</where>
</select>
新加功能,導出之後更新字段
/** ******************** 網銀支付列表導出 begin**************************************************************************************************** **/
/**
* 功能:網銀支付列表導出
* @Title: exportPaymentFundPayList
* @Description:
* @param
* @return void
* @author zhulong
* @throws Exception
* @date 2018年2月6日
*/
public void exportPaymentFundPayList(Context context) throws Exception {
try {
/**查詢結果集**/
List<Map<String, Object>> paymentFundPayList = new ArrayList<Map<String,Object>>();
/**查詢條件**/
Map<String, Object> conditionMap = new HashMap<String, Object>();
conditionMap.put("corpId", this.getUserInfo().getCorpid());
conditionMap.put("empId", this.getUserInfo().getEmployeeId());
//根據查詢條件導出(跟當前查詢數據一致)
conditionMap.putAll(context.getDataMap());
//paymentFundPayList = sqlMap.queryForList("PaymentSqlMap.exportPaymentFundPayDataAgribank", conditionMap);
paymentFundPayList = sqlMap.queryForList("PaymentSqlMap.qryPaymentFundPayData", conditionMap);
//導出的文件名
String fileName = "中國農業銀行離線制單導入文件.xls";
//農業銀行離線導出文件的實現方法
Workbook workbook = ExportExcelUtil.exportAgribank(fileName, paymentFundPayList);
/** 獲得response對象**/
HttpServletResponse response = (HttpServletResponse) context.getChannelContext().getResponse();
/** 設置編碼格式**/
response.setCharacterEncoding("UTF-8");
response.setContentType("application/x-download");
fileName = URLEncoder.encode(fileName, "UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
/** 流輸出**/
OutputStream out = response.getOutputStream();
workbook.write(out);
out.close();
//導出Excel文件之後修改查詢結果中的發送時間字段和支付狀態字段,支付狀態字段設置成 6付款中
for(int i=0;i<paymentFundPayList.size();i++){
Map<String, Object> paymentMap = paymentFundPayList.get(i);
String fundId =(String)paymentMap.get("id");//此爲fundId
//String batchNo =(String)paymentMap.get("batchNo");
Map<String, Object> paraMap = new HashMap<String, Object>();
paraMap.put("corpId", this.getUserInfo().getCorpid());
paraMap.put("fundId", fundId);
//paraMap.put("payStatus", "6");
//paraMap.put("batchNo", batchNo);
sqlMap.update("PaymentSqlMap.updatePaymentStatusAsInPayAgribank", paraMap);
}
} catch (Exception e) {
throw e;
}
}
<!-- 導出農行離線文件之後,修改支付狀態爲“付款中” -->
<update id="updatePaymentStatusAsInPayAgribank" parameterType="Map">
BEGIN
-- 更新付款表T_FMC_FUND_PAYMENT付款狀態爲“支付中”
UPDATE T_FMC_FUND_PAYMENT PF
SET PF.PAYSTATUS = '6', PF.PUSHDATE = SYSDATE
WHERE PF.CORPID = #{corpId}
AND PF.ID = #{fundId, jdbcType=VARCHAR};
-- 更新支付表付款狀態爲“支付中”
UPDATE T_FMC_BILL_PAYMENT BP
SET BP.PAYSTATUS = '6'
WHERE BP.CORPID = #{corpId}
AND BP.ID IN (SELECT PF.PAYMENTID FROM T_FMC_FUND_PAYMENT PF
WHERE PF.ID = #{fundId, jdbcType=VARCHAR});
-- 更新主表支付狀態爲“支付中”
UPDATE T_FMC_BILL_MAINDATA BM
SET BM.BILLSTATUS='6'
WHERE BM.ID IN (SELECT PF.MAINID
FROM T_FMC_FUND_PAYMENT PF
WHERE PF.ID = #{fundId, jdbcType = VARCHAR});
END;
</update>
九。PL/SQL中快速查看某個表中的各個字段的含意和數據類型==》選中表名==》右鍵點擊View==》點擊Columns
十。調式==》支付管理==》網銀支付 表BILL_PAYMENT 和表 FUND_PAYMENT中數據的同步
Debug 斷點位置 exportPaymentFundPayList 自己之前的位置 paymentFundPayList ==》
數據同步方法==》FUND 表中的 PURPOSE 字段==》搜索 syn ======BillPaymentInfoSynToFundService 、、synPaymentInfoToFund
BillBusiness_SqlMap.xml 文件:
前:前:前:前:前:前:前:前:前:前:前:前:前:【效果,新提交的數據PURPOSE字段會直接在FUND表中查詢到】
(SELECT SO.CODE FROM T_FMC_SYS_OBJECT SO WHERE SO.ID = PM.PAYMETHOD) PAYMETHOD,
(SELECT SO.CODE FROM T_FMC_SYS_OBJECT SO WHERE SO.ID = PM.PAYTYPE) PAYTYPE,
(SELECT SO.CODE FROM T_FMC_SYS_OBJECT SO WHERE SO.ID = PM.PURPOSE) PURPOSE,
後:後:後:後:後:後:後:後:後:後:後:後:後:
(SELECT SO.CODE FROM T_FMC_SYS_OBJECT SO WHERE SO.ID = PM.PAYMETHOD) PAYMETHOD,
(SELECT SO.CODE FROM T_FMC_SYS_OBJECT SO WHERE SO.ID = PM.PAYTYPE) PAYTYPE,
PM.PURPOSE PURPOSE, ... ...
十一。系統中某些功能所在的位置
1)點擊左側樹形列表,在右側彈出的頁面是並列的兩個小頁面
2)導入 \ 導出\下載 功能
其中,下載:就是將文件放到項目中,
3)導出之後,查詢、更改
4)查詢、新增、刪除
5)啓用/禁用 功能在系統中的位置。【 之前一直找不到是因爲往後、往右側的拖動條沒拉 】
在數據庫中多對應的字段爲 ENABLE
十二。前端輸入框中輸入的都是字符串,而在數據庫中Amout 是Number類型,需要將輸入框中的字符串轉換成number類型的數據
金額篩選:
<if test="totalAmountMin != null and totalAmountMin != ''">
AND MM.AMOUNT <![CDATA[>=]]> to_number(#{totalAmountMin})
</if>
<if test="totalAmountMax != null and totalAmountMax != ''">
AND MM.AMOUNT <![CDATA[<=]]> to_number(#{totalAmountMax})
</if>
時間篩選:
<if test="createStartTime != null and createEndDate != null">
AND TRUNC(TO_DATE(MM.CREATETIME, 'YYYY-MM-DD HH24:MI:SS')) <![CDATA[>=]]> TRUNC(TO_DATE(#{createStartTime, jdbcType=VARCHAR},'YYYY-MM-DD HH24:MI:SS'))
AND TRUNC(TO_DATE(MM.CREATETIME, 'YYYY-MM-DD HH24:MI:SS')) <![CDATA[<=]]> TRUNC(TO_DATE(#{createEndDate, jdbcType=VARCHAR},'YYYY-MM-DD HH24:MI:SS'))
</if>
<if test="createStartTime != null and createEndDate == null">
AND TRUNC(TO_DATE(MM.CREATETIME, 'YYYY-MM-DD HH24:MI:SS')) <![CDATA[>=]]> TRUNC(TO_DATE(#{createStartTime, jdbcType=VARCHAR},'YYYY-MM-DD HH24:MI:SS'))
</if>
<if test="createStartTime == null and createEndDate != null">
AND TRUNC(TO_DATE(MM.CREATETIME, 'YYYY-MM-DD HH24:MI:SS')) <![CDATA[<=]]> TRUNC(TO_DATE(#{createEndDate, jdbcType=VARCHAR},'YYYY-MM-DD HH24:MI:SS'))
</if>
十三。前端文件的部署,整個項目的運行
dist.zip文件解壓,找到nginx服務器目錄,解壓之後將 D:\nginx-1.2.9\nginx-1.2.9\html 目錄下的static文件夾和index.html文件替換掉,
dist.zip解壓之後就是static文件夾和index.html文件,是最新的版本
十四。項中接口的規範
十五。二次研發,新需求
十六。
前端數據的展示
十七。IP地址【注意內網IP與外網IP的區別:簡單來說呢,外網IP就是標示了您在整個互聯網上的地址,就相當於小區的地址;而內網IP,就是標識着您在局域網裏面的地址,也就是小區內的幾棟幾樓幾號房子。內網IP局域網,網線都是連接在同一個 交換機上面的,也就是說它們的IP地址是由交換機或者路由器進行分配的。而且每一個IP也是有所不同的,並且這些連接在同一個路由器上的電腦都可以通過internet連接共享的,也就是說網吧裏面的電腦是可以訪問網吧內另外一部電腦的。外網IP是全世界唯一的IP地址,僅分配給一個網絡設備。而內網IP是由路由器分配給每一部內部使用的IP地址,而內網的所有用戶都是通過同一個外網IP地址進行上網的】
內網IP的查看
方法一:
方法二:
外網IP
直接百度IP
十八。Linux服務器部署
1)關閉防火牆,應用和數據庫的防火牆都要關閉
2)內外IP和外網IP都要能夠連接上
3)注意字符格式UTF-8和UTF-8-BOM的區別
4)使用Secure CRT連接服務器,使用FileZilla傳送文件。文件的權限設置777可以在FileZilla中進行,也可以使用命令操作。
十九。部署復星項目時,缺少jar包,報錯
將jar 包kurrent-security-0.0.9-SNAPSHOT.jar 放置在D:\mavejars\com\kurrent\security\kurrent-security\0.0.9-SNAPSHOT目錄下
二十。登錄
CustomProvisioningImpl
/**
* FMC權限數據提供實現類
*
* @author wxx
*/
public class CustomProvisioningImpl extends AuthorityProvisionningAdapter implements InitializingBean , ApplicationContextAware {
Line101
key = mobile.matcher(accountArr[1]).matches() ? "mobile" : (email.matcher(accountArr[1]).matches() ? "email" : (samAccountName.matcher(accountArr[1].trim()).matches() ? "no" :"username"));
&&&Line110
userInfo = sqlMap.queryForObject("rbac.account.selectUserInfoByCorp", sqlParam);
billInfoDefinePubFnc.js 文件中:
Line 684
valiArray: {
'000':{ // 非申請類
'1':[ // 申請單
{code:'apply01', text:'借款區金額 = 付款區實付金額'},
{code:'apply02', text:'借款區金額 <= 主表區金額'},
{code:'apply03', text:'明細區每行金額均大於0'},
{code:'apply04', text:'主表區金額大於0'},
{code:'apply05', text:'明細區金額與標準區金額相等'},
{code:'apply06', text:'每條明細行必須執行分攤'}, // expense09
{code:'apply07', text:'借款區金額=主表區金額'} // 借款單添加規則
],
Line 725
'001':{ // 申請類
'1':[ // 申請單
{code:'apply01', text:'借款區金額 = 付款區實付金額'},
{code:'apply02', text:'借款區金額 <= 主表區金額'},
{code:'apply03', text:'明細區每行金額均大於0'},
{code:'apply04', text:'主表區金額大於0'},
{code:'apply05', text:'明細區金額與標準區金額相等'},
{code:'apply06', text:'每條明細行必須執行分攤'}, // expense09
{code:'apply07', text:'借款區金額=主表區金額'} // 借款單添加規則
],
----------------------------------------------- 我是低調的分隔線 -----------------------------------------------