費控系統雜記一

 

一。自己本機中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:'借款區金額=主表區金額'} // 借款單添加規則
                 ],

 

 

-----------------------------------------------  我是低調的分隔線  -----------------------------------------------

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章