📄 personalpspaction.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 + -