⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 personalpspaction.java

📁 Eclipse RCP下编写的工作管理软件代码
💻 JAVA
字号:
package net.sf.pim.action;

import static net.sf.util.StringUtil.getDeltaDay;
import static net.sf.util.StringUtil.getFirstDayOfWeek;
import static net.sf.util.StringUtil.parseInt;
import static net.sf.util.StringUtil.minute2hour;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.component.table.BindedTableViewer;
import net.sf.component.table.IBindedTableModel;
import net.sf.pim.UiUtil;
import net.sf.pim.model.Personal;
import net.sf.pim.model.psp.Work;
import net.sf.pim.model.psp.WorkComparator;
import net.sf.pim.model.psp.WorkList;
import net.sf.util.ConfigHelper;
import net.sf.util.StringUtil;
import net.sf.util.persistence.DataException;
import net.sf.util.persistence.IEntry;

import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Display;

/**
 * 从psp汇总周报
 */
public class PersonalPspAction extends UiAction {
    public PersonalPspAction() {
        super();
        name = "汇总周报";
        gif = "sub.gif";
    }

    public void run() {
    	super.run();
        if (!UiUtil.getActiveTableEditor().getName().equals("个人周报") || !UiUtil.getActiveTableEditor().getViewer().getModel().isEditable())
            return;
        if (!MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), "提示", "汇总周报将删除任务描述为空的计划,是否继续?"))
        	return ;
        
        BindedTableViewer btv=UiUtil.getActiveTableEditor().getViewer();
        IBindedTableModel model=btv.getModel();
        
        //取当前周期的
        String firstDay=getFirstDayOfWeek(model.getChunkId());
    	String dayRange[]=new String[]{firstDay,getDeltaDay(firstDay,6)};
        if(ConfigHelper.getFirstDay() == 6)
        	dayRange=new String[]{getDeltaDay(firstDay,-2),getDeltaDay(firstDay,4)};
        //取得所有的psp记录
        WorkList workList=null;
        try {
			workList=new WorkList(parent.getDataManager().readList("", dayRange));
		} catch (DataException e) {
			e.printStackTrace();
		}
		Work[] works=workList.getWorks();
		if(works.length < 2) return ;
		//依计划排序,算出计划时间
		Map<String,String> map=new HashMap<String,String>();
		Arrays.sort(works,new WorkComparator("plan",false));
		int minutes=parseInt(works[0].getGzsj());
		String task=works[0].getPlan();
		
		for(int i=1;i<works.length;i++){
			if(task.equals(works[i].getPlan())){
				minutes += parseInt(works[i].getGzsj());
			}else{
				//计算完成一组,保存
				map.put(task,minute2hour(minutes));
				//重新开始下一组
				task=works[i].getPlan();
				minutes=parseInt(works[i].getGzsj());
			}
			//没有计划的就先不遍历了
			if(task.equals(""))break;
		}
        minutes=0;
        List list=new ArrayList();
        task="";
        int delta=0; //对非计划工作时间进行汇总
        boolean first = true;
		//计算总工作时间,将非计划任务进行汇总计算,超过60分钟的加入周报
        for(int i=0;i<works.length;i++){
        	if(works[i].getPlan().equals("")){
        		//启动条件
        		if(first){
        			task = StringUtil.soundLike(works[i].getGzsm());
        			delta = parseInt(works[i].getGzsj());
        			first=false;
        		}
        		else{
        			if(works[i].getGzsm().startsWith(task)){
        				delta += parseInt(works[i].getGzsj());
        			}else{
        				//计算完成一组,看看是否保存
        				if(delta >= ConfigHelper.getPspMaxTime()){
	                		Personal p=new Personal();
	                		p.setProperty("minute",minute2hour(delta));
	                		p.setProperty("result",task);
	                		list.add(p);
        				}
        				//重新开始下一组
        				task=StringUtil.soundLike(works[i].getGzsm());
        				delta=parseInt(works[i].getGzsj());
        			}
    				//最后一条记录的处理
    				if( i== works.length -1 && delta >= ConfigHelper.getPspMaxTime()){
                		Personal p=new Personal();
                		p.setProperty("minute",minute2hour(delta));
                		p.setProperty("result",task);
                		list.add(p);
    				}
        		}
        	}
        	//总工作时间汇总
        	minutes += (parseInt(works[i].getGzsj())+parseInt(works[i].getDdsj()));	
        }
        List<IEntry> rows = model.getRows();
        for(int i=rows.size()-1;i>=0;i--){
        	IEntry entry=rows.get(i);
			if(entry.getProperty("task").equals(""))
				rows.remove(entry);
			else
				entry.setProperty("minute",StringUtil.isZero(map.get(entry.getProperty("task"))));
        }
        rows.addAll(list);
        //合计值
		Personal p=new Personal();
		p.setProperty("minute",minute2hour(minutes));
		p.setProperty("result","合计");
		rows.add(p);
		btv.refresh(true);
        model.setDirty(true);
    }
}
   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -