费控系统杂记一

 

一。自己本机中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:'借款区金额=主表区金额'} // 借款单添加规则
                 ],

 

 

-----------------------------------------------  我是低调的分隔线  -----------------------------------------------

 

 

 

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