gdufo

 

通达OA 自动选择人中 增加 根据表单字段的直属上司

一、增加流程定义时可以选择项目

MYOA\webroot\general\system\workflow\flow_type\flow_design\view_list\edit.php

794行
<option value="11" <? if($AUTO_TYPE=="11")echo "selected";?>>按表单字段选择的直属上司</option>


\\10.110.2.210\d$\MYOA\webroot\general\workflow\list\turn\condition.php
765行处增加
  }elseif($AUTO_TYPE==11) //根据表单字段的主属上司来处理
  {
   if(is_numeric($AUTO_USER))
   {
     $query3 = "SELECT ITEM_DATA from FLOW_RUN_DATA where RUN_ID='$RUN_ID' AND ITEM_ID='$AUTO_USER'";
      $cursor3= exequery($connection,$query3);
      if($ROW=mysql_fetch_array($cursor3))
         $ITEM_DATA = $ROW["ITEM_DATA"];
      $APPLY_USER_ID =  substr($ITEM_DATA,strpos($ITEM_DATA,"_")-1);

       //根据前一节点的直属上司
      $query = "select EMP_MANAGECODE from user where user_id ='$APPLY_USER_ID'";
      $cursor= exequery($connection,$query);
      if($ROW=mysql_fetch_array($cursor))
      {
         $USER_ID=$ROW["EMP_MANAGECODE"];

         $query1 = "SELECT * from USER where USER_ID='$USER_ID'";
         $cursor1= exequery($connection,$query1);
         if($ROW=mysql_fetch_array($cursor1))
         {
            $PRCS_NEW_USER_ID=$USER_ID;
            $PRCS_NEW_USER_NAME=$ROW["USER_NAME"];
            $PRCS_NEW_DEPT_ID=$ROW["DEPT_ID"];
            $PRCS_NEW_USER_PRIV=$ROW["USER_PRIV"];
            $PRCS_NEW_USER_PRIV_OTHER=$ROW["USER_PRIV_OTHER"];
         }
      }
      $PRCS_OP_USER=$PRCS_NEW_USER_ID;
      $PRCS_OP_USER_NAME=$PRCS_NEW_USER_NAME;
      $PRCS_USER_AUTO=$PRCS_NEW_USER_ID.",";
      $PRCS_USER_NAME=$PRCS_NEW_USER_NAME.",";

      /*//检查该发起人是否有经办权限
      if($PRCS_DEPT=="ALL_DEPT"||find_id($PRCS_USER,$PRCS_NEW_USER_ID)||find_id($PRCS_DEPT,$PRCS_NEW_DEPT_ID)||find_id($PRCS_PRIV,$PRCS_NEW_USER_PRIV)||priv_other($PRCS_PRIV,$PRCS_NEW_USER_PRIV_OTHER))
      {
         $PRCS_OP_USER=$PRCS_NEW_USER_ID;
         $PRCS_OP_USER_NAME=$PRCS_NEW_USER_NAME;
         $PRCS_USER_AUTO=$PRCS_NEW_USER_ID.",";
         $PRCS_USER_NAME=$PRCS_NEW_USER_NAME.",";
      }*/

    }
  }
3.在流程定义处保存的地方也要修改
MYOA\webroot\general\system\workflow\flow_type\flow_design\view_list\update.php
的66修改成:
  if($AUTO_TYPE==7 || $AUTO_TYPE==11)

posted @ 2013-10-30 10:53 gdufo 阅读(711) | 评论 (0)编辑 收藏

杀掉SQLServer某些链接进程


select * from sysprocesses
where dbid in (select dbid from sysdatabases where name='overtime')
and program_name ='PHP 5'


USE master
DECLARE @spid int
DECLARE CUR CURSOR
FOR SELECT spid FROM sysprocesses WHERE dbid = 11 and program_name ='PHP 5'
OPEN CUR
FETCH NEXT FROM CUR INTO @spid
WHILE @@FETCH_STATUS = 0
BEGIN
  EXEC ('KILL ' + @spid )
FETCH NEXT FROM CUR INTO @spid
END
CLOSE CUR
DEALLOCATE CUR

posted @ 2013-10-29 08:11 gdufo 阅读(592) | 评论 (0)编辑 收藏

MySQL中的配置参数interactive_timeout和wait_timeout(可能导致过多sleep进程的两个参数 Too many connections)

MySQL中的配置参数interactive_timeout和wait_timeout(可能导致过多sleep进程的两个参数)

1)interactive_timeout:
参数含义:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。
参数默认值:28800秒(8小时)

(2)wait_timeout:
参数含义:服务器关闭非交互连接之前等待活动的秒数。
在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。
参数默认值:28800秒(8小时)

MySQL服务器所支持的最大连接数是有上限的,因为每个连接的建立都会消耗内存,因此我们希望客户端在连接到MySQL Server处理完相应的操作后,应该断开连接并释放占用的内存。如果你的MySQL Server有大量的闲置连接,他们不仅会白白消耗内存,而且如果连接一直在累加而不断开,最终肯定会达到MySQL Server的连接上限数,这会报'too many connections'的错误。对于wait_timeout的值设定,应该根据系统的运行情况来判断。在系统运行一段时间后,可以通过show processlist命令查看当前系统的连接状态,如果发现有大量的sleep状态的连接进程,则说明该参数设置的过大,可以进行适当的调整小些。

问题:
   如果在配置文件my.cnf中只设置参数wait_timeout=100,则重启服务器后进入,执行:
   Mysql> show variables like “%timeout%”;
会发现参数设置并未生效,仍然为28800(即默认的8个小时)。
查询资料后,要同时设置interactive_timeout和wait_timeout才会生效。
【mysqld】
wait_timeout=100
interactive_timeout=100
重启MySQL Server进入后,查看设置已经生效。


问题1:这里为什么要同时设置interactive_timeout,wait_timeout的设置才会生效?

问题2:interactive的值如果设置的和wait_timeout不同,为什么Interactive_timeout会覆盖wait_timeout?

问题3:在进行MySQL优化时,因为interactive_timeout决定的是交互连接的时间长短,而wait_timeout决定的是非交互连接的时间长短。如果在进行连接配置时mysql_real_connect()最后一个参数client_flag不设置为CLIENT_INTERACTIVE,是不是interactive_timeout的值不会覆盖wait_timeout?

问题4:为了减少长连接的数量,在设置优化时是不是可以将interactive_timeout的值设置的大些,而wait_timeout的值设置的小些?但是问题2的描述好像又不允许这样。。。

posted @ 2013-10-23 15:16 gdufo 阅读(564) | 评论 (0)编辑 收藏

查询oracle被锁对象并解锁

1、查询oracle被锁对象及其语句

SELECT a_s.owner,
  a_s.object_name,
  a_s.object_type,
  VN.SID,
  VN.SERIAL#,
  VS.SPID "OS_PID",
  VN.PROCESS "CLIENT_PID",
  VN.USERNAME,
  VN.OSUSER,
  VN.MACHINE "HOSTNAME" ,
  VN.TERMINAL,
  VN.PROGRAM,
  TO_CHAR(VN.LOGON_TIME,'YYYY-MM-DD HH24:MI:SS')"LOGIN_TIME",
  'alter system kill session '''||vn.sid||','||vn.serial#||''';' "ORACKE_KILL",
  'kill -9 '|| VS.SPID "OS_KILL"
FROM ALL_OBJECTS A_S,
  V$LOCKED_OBJECT V_T,
  V$SESSION VN,
  V$PROCESS VS
WHERE A_S.OBJECT_ID=V_T.OBJECT_ID
AND V_T.SESSION_ID =VN.SID
AND VS.ADDR=VN.PADDR
AND VN.USERNAME NOT IN('SYSMAN','SYS');

2、查询该sid的sql语句

select * from v$sql vl,v$session vn
where vl.ADDRESS= decode(vn.SQL_ADDRESS,null,vn.PREV_SQL_ADDR,VN.SQL_ADDRESS)
and vn.sid=&sid;

3、解锁

alter system kill session 'sid,serial#';
--note:不能kill自身

4、查询被锁对象增强版

SELECT DDL.OWNER AS 用户,
       DDL.NAME  AS 对象,
       DDL.type  AS 类型,
       VS.OSUSER AS OS_USER,
       VS.MACHINE,
       VS.STATUS,
       VS.PROGRAM,
       VS.LOGON_TIME AS "LOGIN_TIME",
       VP.SPID,
       'kill -9 ' || VP.SPID AS OS_KILL,
       vs.sid,
       vs.SERIAL#,
       'alter system kill session ''' || vs.sid || ',' || vs.serial# ||
       ''';' "ORACKE_KILL"
  FROM DBA_DDL_LOCKS DDL, V$SESSION VS, V$PROCESS VP
 WHERE DDL.SESSION_ID = VS.SID
   AND VS.PADDR = VP.ADDR;

posted @ 2013-10-09 16:59 gdufo 阅读(4561) | 评论 (0)编辑 收藏

SQL修改种子标识的当前值

pasting

在日常的sql server开发中,经常会用到Identity类型的标识列作为一个表结构的自增长编号。比如文章编号、记录序号等等。自增长的标识列的引用很大程度上方便了数据库程序的开发,但有时这个固执的字段类型也会带来一些麻烦。

一、修改标识列字段值:

有时,为了实现某种功能,需要修改类型为Identity自增长类型的字段的值,但由于标识列的类型所限,这种操作默认是不允许的。比如目前数据库有5条正常添加的数据,此时删除2条,那么如果再添加数据时,自增长的标识列会自动赋值为6,可这时如果想在插入数据时给赋值3呢,默认是不允许的。如果您特别想改变这个字段的值,完全由自己控制该标识字段值的插入,方法还是有的,哈哈。

SET IDENTITY_INSERT [TABLE] [ON|OFF]

使用上述语句,可以方便的控制某个表的某个自增长标识列是否自动增长,也就是说是否允许你在insert一条记录时手动指定标识列字段的值。如果指定为on,则可以insert时指定标识列字段的值,该值不自动增长赋值。当然,如果使用完毕,还需使用这个语句将开关关闭到默认状态off,不然下次insert数据时该字段还是不会自动增长赋值的,有始有终嘛。

如:

 SET IDENTITY_INSERT [TABLE_NAME] ON

 ----------- INSERT SEG--------

  SET IDENTITY_INSERT [TABLE_NAME] OFF  

二、重置标识列字段值:

当数据记录被删除一部分后,后面再添加的新数据记录,标识列数值会有很大的空闲间隔,看上去是不是很不爽呢。即使你删除表中全部记录,identity标识列的值还是会无休止的自动增加变大,而不是从头开始增长。通过下面这条语句可以重置自增长字段的种子值:

DBCC CHECKIDENT(TABLE, [RESEED|NORESEED], 200)上述语句将把指定表的种子值强制重设为1。然而,如果你不想将种子重设为1,你可以用你想用的种子值替代第三个参数。如果你想知道当前的种子,而不是想重设标识种子,这时你就要用NORESEED,而不用再去设置第三个参数。

如  DBCC CHECKIDENT(Product, RESEED, 210)

posted @ 2013-08-01 10:56 gdufo 阅读(5500) | 评论 (0)编辑 收藏

本地测试dedecms二级域名

测试人:QQ -- 35629400 子夜时分,如有错误,请指出。

环境:Win7+Phpnow+V57_UTF8_SP1(2013-6-7版本)

一、系统设置

  1.【后台管理】--》【系统】--》【核心设置】,红色区域设置成“是”


  2.【后台管理】--》【核心】--》【网站栏目管理】--》选择一个顶级栏目进行修改。

在【高级选项】中“启用”【多站点支持】

在【绑定域名】中输入所要的域名,如:http://webbase.chugui.com


二、
Apache中设置

  打开Apache的虚拟主机配置文件。

  如我的文件在:D:\Phpnow\Apache-22\conf\extra\httpd-vhosts.conf 

<Directory ../vhosts>

    AllowOverride All

    Order allow,deny

    Allow from all

</Directory>

NameVirtualHost *   #这个必须有

<VirtualHost *>

    DocumentRoot ../htdocs

    ServerName default:80

    ErrorLog logs/default-error_log

</VirtualHost>

<VirtualHost *>

    <Directory "D:/Phpnow/htdocs/dedecms">

        Options -Indexes FollowSymLinks

        Allow from all

        AllowOverride All

    </Directory>

    ServerAdmin admin@ww2.chugui.com

    DocumentRoot "D:/Phpnow/htdocs/dedecms"

    ServerName ww2.chugui.com:80

    ServerAlias *.ww2.chugui.com

    ErrorLog logs/ww2.chugui.com-error_log

    php_admin_value open_basedir "D:\Phpnow\htdocs\dedecms;C:\Windows\Temp;"

</VirtualHost>

<VirtualHost *>

    <Directory "D:/Phpnow/htdocs/dedecms/html/webbase">  

        Options -Indexes FollowSymLinks

        Allow from all

        AllowOverride All

    </Directory>

    ServerAdmin admin@webbase.chugui.com

    DocumentRoot "D:/Phpnow/htdocs/dedecms/html/webbase"

    ServerName webbase.chugui.com:80  #二级域名指定处

    ErrorLog logs/webbase.chugui.com-error_log

    php_admin_value open_basedir "D:\Phpnow\htdocs\dedecms\html\webbase;C:\Windows\Temp;"

</VirtualHost>

三、如果公网上做以上两步就行了,为了在本地测试,需要修改host文件。

   在文件中加入以下几行:(目的告诉浏览器以下地址不用去公网上解析)

   127.0.0.1 ww2.chugui.com

   127.0.0.1 chugui.com

   127.0.0.1 webbase.chugui.com

四、针对网上有些人说要修改channelunit.help.php里面的内容,否则会现部门分js,css有引用的问题,我没有修改,貌似也没有发现错。这个有待后期考证。

    //是否强制使用绝对网址

        if($GLOBALS['cfg_multi_site']=='Y')

        {

            if($siteurl=='')

            {

                $siteurl = $GLOBALS['cfg_basehost'];

            }

            if($moresite==1)

            {

                $articleUrl = preg_replace("#^".$sitepath."#", '', $articleUrl);

            }

            if(!preg_match("/http:/", $articleUrl))

            {

                $articleUrl = $siteurl.$articleUrl;

            }

        }

五、至此查看结果如下:

  


六、
广州白马档口出租

番禺大石空调维修中心


posted @ 2013-06-22 16:18 gdufo 阅读(958) | 评论 (1)编辑 收藏

sqlserver 的 dbmial经常无故停止工作。

重启dbmail
EXEC msdb.dbo.sysmail_stop_sp
EXEC msdb.dbo.sysmail_start_sp

http://social.msdn.microsoft.com/Forums/en-US/sqldatabaseengine/thread/fabfecfe-f493-4628-a355-79a4322ca7e1/

广州白马档口出租

番禺大石空调维修中心

posted @ 2013-04-20 20:59 gdufo 阅读(503) | 评论 (0)编辑 收藏

javamail与exchange 发送图片与文字(图片内嵌)

package com.ellington.test;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;  
import java.util.Properties;  
 
import javax.mail.BodyPart;  
import javax.mail.Message;  
import javax.mail.MessagingException;  
import javax.mail.Multipart;  
import javax.mail.Session;  
import javax.mail.Transport;  
import javax.mail.internet.InternetAddress;  
import javax.mail.internet.MimeBodyPart;  
import javax.mail.internet.MimeMessage;  
import javax.mail.internet.MimeMultipart;  

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
 
public class Mailer {  
    private String host;  
    private String auth;  
    private String username;  
    private String domainUser;  
    private String password;  
 
    public boolean send(String[] to, String[] cc, String[] bcc, String subject, String content) throws MessagingException {  
        Properties props = new Properties();  
        props.put("mail.smtp.host", host);  
        props.put("mail.smtp.auth", auth);  
        Session s = Session.getInstance(props);  
        //      s.setDebug(true);  
 
        MimeMessage message = new MimeMessage(s);  
 
        InternetAddress from = new InternetAddress(username);  
        message.setFrom(from);  
        InternetAddress[] Toaddress = new InternetAddress[to.length];  
        for (int i = 0; i < to.length; i++)  
            Toaddress[i] = new InternetAddress(to[i]);  
        message.setRecipients(Message.RecipientType.TO, Toaddress);  
 
        if (cc != null) {  
            InternetAddress[] Ccaddress = new InternetAddress[cc.length];  
            for (int i = 0; i < cc.length; i++)  
                Ccaddress[i] = new InternetAddress(cc[i]);  
            message.setRecipients(Message.RecipientType.CC, Ccaddress);  
        }  
 
        if (bcc != null) {  
            InternetAddress[] Bccaddress = new InternetAddress[bcc.length];  
            for (int i = 0; i < bcc.length; i++)  
                Bccaddress[i] = new InternetAddress(bcc[i]);  
            message.setRecipients(Message.RecipientType.BCC, Bccaddress);  
        }  
        message.setSubject(subject);  
        message.setSentDate(new Date());  
 
        BodyPart mdp = new MimeBodyPart();  
        mdp.setContent(content, "text/html;charset=utf-8");  
        Multipart mm = new MimeMultipart();  
        mm.addBodyPart(mdp);  
        message.setContent(mm);  
 
        message.saveChanges();  
        Transport transport = s.getTransport("smtp");  
        transport.connect(host, (null == domainUser) ? username : domainUser, password);  
        transport.sendMessage(message, message.getAllRecipients());  
        transport.close();  
        return true;  
    }  
 
    public Mailer(String host, String auth, String domainUser, String username, String password) {  
        super();  
        this.host = host;  
        this.auth = auth;  
        this.domainUser = domainUser;  
        this.username = username;  
        this.password = password;  
    }
    /**
     * @param args
     * @throws MessagingException
     */
    public static void main(String[] args) throws MessagingException {
        // TODO Auto-generated method stub
        System.out.println(GetImageStr());
        new Mailer("10.110.4.4", "false", "abc\\sysadmin", "sysadmin@abc.com", "sysadmin").send(new String[] { "G@abc.com","F@abc.com" }, null, null, "邮件中发送文字与图片", "<h3>hello html5</h3><img src=\"data:image/png;base64,"+GetImageStr()+"\">" );
    }        
        
     public static String GetImageStr()
        {//将图片文件转化为字节数组字符串,并对其进行Base64编码处理
            String imgFile = "d:\\111.jpg";//待处理的图片
            InputStream in = null;
            byte[] data = null;
            //读取图片字节数组
            try
            {
                in = new FileInputStream(imgFile);        
                data = new byte[in.available()];
                in.read(data);
                in.close();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            //对字节数组Base64编码
            BASE64Encoder encoder = new BASE64Encoder();
            return encoder.encode(data);//返回Base64编码过的字节数组字符串
        }
        public static boolean GenerateImage(String imgStr)
        {//对字节数组字符串进行Base64解码并生成图片
            if (imgStr == null) //图像数据为空
                return false;
            BASE64Decoder decoder = new BASE64Decoder();
            try
            {
                //Base64解码
                byte[] b = decoder.decodeBuffer(imgStr);
                for(int i=0;i<b.length;++i)
                {
                    if(b[i]<0)
                    {//调整异常数据
                        b[i]+=256;
                    }
                }
                //生成jpeg图片
                String imgFilePath = "d:\\222.jpg";//新生成的图片
                OutputStream out = new FileOutputStream(imgFilePath);    
                out.write(b);
                out.flush();
                out.close();
                return true;
            }
            catch (Exception e)
            {
                return false;
            }
        }        
}

广州白马档口出租

番禺大石空调维修中心

posted @ 2013-04-19 10:30 gdufo| 编辑 收藏

修改linux系统时间

1.查看系统当前时间
>date
2.修改正确的时间
>date 04180819 ==4月18号8点19分
>确认当前时间:
>clock -w

广州白马档口出租

番禺大石空调维修中心

posted @ 2013-04-18 08:21 gdufo| 编辑 收藏

定时任务使用crontab使用

http://www.centos.bz/2011/03/auto-run-task-crontab/

1.进行编辑
>crontab -e
 
*/10 * * * * /usr/bin/wget -q -O /usr/local/oataskrun.log http://10.110.8.41:81/task/pe_geber_remind.php

每10钟执行一次任务。
>service crond restart 重启服务使其生效。




crontab简介

crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于 “crontab”文件中,以供之后读取和执行。该词来源于希腊语 chronos(χρόνος),原意是时间。  通常,crontab储存的指令被守护进程激活, crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。

crontab用法

crontab的格式如下面:

f1 f2 f3 f4 f5 program

其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行程式的路径。

  • 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程式,其余类推
  • 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推
  • 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推
  • 当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其余类推

管理员登录SSH,输入命令crontab -e编辑crontab文件,根据上面的格式输入并保存。

crontab例子

每月每天每小时的第 0 分钟执行一次 /bin/ls :

  1. 0 * * * * /bin/ls

在 12 月内, 每天的早上 6 点到 12 点中,每隔 20 分钟执行一次 /usr/bin/backup :

  1. */20 6-12 * 12 * /usr/bin/backup

周一到周五每天下午 5:00 寄一封信给 alex@domain.name :

  1. 0 17 * * 1-5 mail -s "hi" alex@domain.name &lt; /tmp/maildata

每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分….执行 echo “haha”

  1. 20 0-23/2 * * * echo "haha"

晚上11点到早上8点之间每两个小时,早上8点

  1. 0 23-7/2,8 * * * date

在hp unix,中,每20分钟执行一次,表示为:0,20,40 * * * * 而不能采用*/n方式,否则出现语法错误

crontab用法其实很容易掌握,懂得使用crontab,对网站和服务器维护起到很大的帮助,比如定时备份,定时优化服务器

posted @ 2013-04-17 17:25 gdufo| 编辑 收藏

仅列出标题
共19页: 上一页 1 2 3 4 5 6 7 8 9 下一页 Last 

导航

统计

常用链接

留言簿(6)

随笔分类

随笔档案

文章分类

文章档案

收藏夹

Hibernate

友情链接

搜索

最新评论

阅读排行榜

评论排行榜