package com.ycsoft.sysmanager.web.action.config;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.ycsoft.beans.core.bill.BTaskScheduleContent;
import com.ycsoft.beans.core.bill.BTaskScheduleContentDto;
import com.ycsoft.beans.core.bill.BTaskScheduleListDto;
import com.ycsoft.beans.system.SSysChange;
import com.ycsoft.beans.task.WRevisitInfo;
import com.ycsoft.business.dto.config.TaskQueryConditionDto;
import com.ycsoft.commons.abstracts.BaseAction;
import com.ycsoft.commons.constants.DictKey;
import com.ycsoft.commons.constants.SysChangeType;
import com.ycsoft.commons.exception.ActionException;
import com.ycsoft.commons.helper.CollectionHelper;
import com.ycsoft.commons.helper.StringHelper;
import com.ycsoft.commons.store.MemoryDict;
import com.ycsoft.daos.helper.BeanHelper;
import com.ycsoft.sysmanager.component.config.TaskComponent;
import com.ycsoft.sysmanager.web.commons.interceptor.WebOptr;
public class TaskAction extends BaseAction {
/**
*
*/
private static final long serialVersionUID = -6147752105205251492L;
private TaskComponent taskComponent;
private String stopTaskList;
private String threeTaskList;
private String status;
private String taskCode;
private String isBase;
private String servType;
private String countyId;
private TaskQueryConditionDto taskCond;
private String [] task_ids;
private String [] cust_ids;
private String work_id;
private String books_time;
private WRevisitInfo revisit;
private String newRevisitInstallerId;
private String cancel_remak;
public String deleteStopTask() throws Exception {
taskComponent.deleteStopTask(taskCode, servType, countyId);
return JSON;
}
public String deleteThreeTask() throws Exception {
taskComponent.deleteThreeTask(taskCode,countyId);
return JSON;
}
@SuppressWarnings("unchecked")
public String updateThreeTaskStatus() throws Exception {
//TODO 记录异动
Map oldTasks = taskComponent.queryTaskSachedule(optr.getCounty_id());
taskComponent.updateThreeTaskStatus(status, taskCode, isBase, countyId);
Map newTasks = taskComponent.queryTaskSachedule(optr.getCounty_id());
Set<String> set = new HashSet<String>();
set.add(taskCode);
saveThreeTaskChanges(oldTasks,newTasks,set);
return JSON;
}
public String updateStopTaskStatus() throws Exception {
//TODO 增加异动
List<BTaskScheduleContentDto> oldList = taskComponent.queryTjTaskSchedule(countyId);
taskComponent.updateStopTaskStatus(status, taskCode, servType, countyId);
List<BTaskScheduleContentDto> newList = taskComponent.queryTjTaskSchedule(countyId);
saveStopTaskChanges(oldList, newList);
return JSON;
}
@SuppressWarnings("unchecked")
public String saveThreeTask() throws Exception {
//TODO 记录异动
Type t = new TypeToken<List<BTaskScheduleListDto>>(){}.getType();
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
List<BTaskScheduleListDto> list = gson.fromJson( threeTaskList , t);
Map oldTasks = taskComponent.queryTaskSachedule(optr.getCounty_id());
taskComponent.saveThreeTask(list, optr.getOptr_id());
Map newTasks = taskComponent.queryTaskSachedule(optr.getCounty_id());
saveThreeTaskChanges(oldTasks,newTasks,CollectionHelper.converToMap(list, "task_code").keySet());
return JSON;
}
public String saveStopTask() throws Exception {
//TODO 记录异动
Type t = new TypeToken<List<BTaskScheduleContentDto>>(){}.getType();
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
List<BTaskScheduleContentDto> list = gson.fromJson( stopTaskList , t);
Set<String> countyids = CollectionHelper.converToMap(list, "county_id").keySet();
List<BTaskScheduleContentDto> oldList = new ArrayList<BTaskScheduleContentDto>();
for(String cid:countyids){
List<BTaskScheduleContentDto> innerList = taskComponent.queryTjTaskSchedule(cid);
oldList.addAll(innerList);
}
taskComponent.saveStopTask(list, optr.getOptr_id());
List<BTaskScheduleContentDto> newList = new ArrayList<BTaskScheduleContentDto>();
for(String cid:countyids){
List<BTaskScheduleContentDto> innerList = taskComponent.queryTjTaskSchedule(cid);
newList.addAll(innerList);
}
saveStopTaskChanges(oldList,newList);
return JSON;
}
/**
* 保存停机任务异动.
* @param oldList
* @param newList
*/
private void saveStopTaskChanges(List<BTaskScheduleContentDto> oldList,List<BTaskScheduleContentDto> newList) throws ActionException{
List<SSysChange> changes = new ArrayList<SSysChange>();
Date createTime = new Date();
String optrId = WebOptr.getOptr().getOptr_id();
String changeType = SysChangeType.TASK_CFG.toString();
String changeDesc = "任务配置异动";
String [] fields = new String[]{"area_name","base_eff_date","base_exp_date","bcnt","county_name","is_real_time_text"
,"isbase_text","notbase_text","notbase_eff_date","notbase_exp_date","schedule_time","serv_type_text","status_text"
,"xcnt","task_code"
};
Map<String, String> taskCodeDescMap = new HashMap<String, String>();
taskCodeDescMap.put("TJ", "停机");
taskCodeDescMap.put("XJ", "巡检");
taskCodeDescMap.put("TD", "退订");
taskCodeDescMap.put("CJ", "催缴");
try{
Integer doneCode = taskComponent.getDoneCOde();
Map<String, BTaskScheduleContentDto> oldMap = CollectionHelper.converToMapSingle(oldList, new String[] { "county_id","task_code", "serv_type" });
Map<String, BTaskScheduleContentDto> newMap = CollectionHelper.converToMapSingle(newList, new String[] { "county_id","task_code", "serv_type" });
Set<String> keySet = new HashSet<String>();
keySet.addAll(oldMap.keySet());
keySet.addAll(newMap.keySet());
if(keySet.size() ==0){
throw new ActionException("保存停机任务异动出现错误,未能正确获取数据");
}
for(String key :keySet){
String keyDesc = null;
BTaskScheduleContent oldTask = oldMap.get(key);
if(oldTask!=null){
oldTask.setTask_code(taskCodeDescMap.get(oldTask.getTask_code()));
keyDesc = MemoryDict.getDictName(DictKey.COUNTY, oldTask.getCounty_id()) + "_"+oldTask.getTask_code() + "_" + oldTask.getServ_type_text();
}
BTaskScheduleContent newTask = newMap.get(key);
if(newTask!=null){
newTask.setTask_code(taskCodeDescMap.get(newTask.getTask_code()));
keyDesc = MemoryDict.getDictName(DictKey.COUNTY, newTask.getCounty_id())+"_"+newTask.getTask_code() + "_" + newTask.getServ_type_text();
}
String content = BeanHelper.beanchange(oldTask, newTask, fields);
if(StringHelper.isNotEmpty(content)){
SSysChange change = new SSysChange(changeType, doneCode, key, keyDesc, changeDesc, content, optrId, createTime);
changes.add(change);
}
}
if(changes.size()>0){
taskComponent.getSSysChangeDao().save(changes.toArray(new SSysChange[changes.size()]));
}
}catch (Exception e) {
throw new ActionException(e.getMessage());
}
}
/**
* 保存 催缴、巡检、退订任务的异动.
* @param oldTasks 以任务类型为key的map
* @param newTasks 以任务类型为key的map
* @param taskCodes 本次保存的任务的类型.
* @throws ActionException
*/
private void saveThreeTaskChanges(Map<String,List<BTaskScheduleListDto>> oldTasks, Map<String, List<BTaskScheduleListDto>> newTasks, Set<String> taskCodes) throws ActionException{
Map<String, String> taskCodeDescMap = new HashMap<String, String>();
taskCodeDescMap.put("TJ", "停机");
taskCodeDescMap.put("XJ", "巡检");
taskCodeDescMap.put("TD", "退订");
taskCodeDescMap.put("CJ", "催缴");
List<BTaskScheduleListDto> oldTaskList = new ArrayList<BTaskScheduleListDto>();
List<BTaskScheduleListDto> newTaskList = new ArrayList<BTaskScheduleListDto>();
for(String key:taskCodes){
List<BTaskScheduleListDto> olds = oldTasks.get(key);
if(CollectionHelper.isNotEmpty(olds)){
for(BTaskScheduleListDto dto:olds){
String isbase2 = dto.getIsbase();
dto.setIsbase("T".equalsIgnoreCase(isbase2) ? taskCodeDescMap.get(dto.getTask_code())+"基本产品":taskCodeDescMap.get(dto.getTask_code())+"增值产品");
oldTaskList.add(dto);
}
}
List<BTaskScheduleListDto> news = newTasks.get(key);
if(CollectionHelper.isNotEmpty(news)){
for(BTaskScheduleListDto dto:news){
String isbase2 = dto.getIsbase();
dto.setIsbase("T".equalsIgnoreCase(isbase2) ? taskCodeDescMap.get(dto.getTask_code())+"基本产品":taskCodeDescMap.get(dto.getTask_code())+"增值产品");
newTaskList.add(dto);
}
}
}
Date createTime = new Date();
String optrId = WebOptr.getOptr().getOptr_id();
String changeType = SysChangeType.TASK_CFG.toString();
String changeDesc = "任务配置异动";
String [] xjTdFields = new String[]{"county_name","schedule_time","status","isbase","max_prod_num","eff_date","exp_date"};
String [] cjFields = new String[]{"county_name","eff_date","exp_date","hst_day","isbase","mail_title","max_prod_num","schedule_time","status","task_info"};
List<SSysChange> changes = new ArrayList<SSysChange>();
try{
Integer doneCode = taskComponent.getDoneCOde();
Map<String, BTaskScheduleListDto> oldMap = CollectionHelper.converToMapSingle(oldTaskList, new String[] {"county_id", "task_code", "isbase" });
Map<String, BTaskScheduleListDto> newMap = CollectionHelper.converToMapSingle(newTaskList, new String[] {"county_id", "task_code", "isbase" });
Set<String> allChangeRecordKeys = new HashSet<String>();
allChangeRecordKeys.addAll(oldMap.keySet());
allChangeRecordKeys.addAll(newMap.keySet());
//汉字显示
for(String key : allChangeRecordKeys){
BTaskScheduleListDto oldTask = oldMap.get(key);
if(oldTask!=null){
String oldStatus = oldTask.getStatus();
oldTask.setStatus("1".equals(oldStatus)?"有效":"失效");
}
BTaskScheduleListDto newTask = newMap.get(key);
if(null !=newTask){
String newStatus = newTask.getStatus();
newTask.setStatus("1".equals(newStatus)?"有效":"失效");
}
String taskCode = oldTask ==null?newTask.getTask_code():oldTask.getTask_code();
String [] fields = null;
if(taskCode.equalsIgnoreCase("CJ")){
fields = cjFields;
}else{
fields = xjTdFields;
}
String taskCodeDesc = taskCodeDescMap.get(taskCode);
String content = BeanHelper.beanchange(oldTask, newTask, fields);
if(StringHelper.isNotEmpty(content)){
String keyDesc = null == oldTask ? MemoryDict.getDictName(DictKey.COUNTY, newTask.getCounty_id())+"_"+taskCodeDesc + "_" + newTask.getIsbase():
MemoryDict.getDictName(DictKey.COUNTY, oldTask.getCounty_id())+"_"+taskCodeDesc + "_" + oldTask.getIsbase() ;
SSysChange change = new SSysChange(changeType, doneCode, key, keyDesc, changeDesc, content, optrId, createTime);
changes.add(change);
}
}
if(changes.size()>0){
taskComponent.getSSysChangeDao().save(changes.toArray(new SSysChange[changes.size()]));
}
} catch (Exception e) {
throw new ActionException(e.getMessage());
}
}
public String queryTjTaskSchedule() throws Exception {
getRoot().setRecords(taskComponent.queryTjTaskSchedule(optr.getCounty_id()));
return JSON_RECORDS;
}
@SuppressWarnings("unchecked")
public String queryTaskSachedule() throws Exception {
getRoot().setOthers(taskComponent.queryTaskSachedule(optr.getCounty_id()));
return JSON_OTHER;
}
public String queryCounty() throws Exception {
getRoot().setRecords(taskComponent.queryCounty(optr.getCounty_id()));
return JSON_RECORDS;
}
/**
* 查询待办工单
* @return
* @throws Exception
*/
public String queryWaitAcceptTask()throws Exception{
if(taskCond == null){
return JSON_PAGE;
}
taskCond.setStart(start);
taskCond.setLimit(limit);
getRoot().setPage( taskComponent.queryWaitAcceptTask(taskCond) );
return JSON_PAGE;
}
/**
* 查询施工队组合成ComboBox Store需要的参数
* @return
* @throws Exception
*/
public String queryInstallerDept()throws Exception{
getRoot().setRecords(taskComponent.queryInstallerDept());
return JSON_RECORDS;
}
public String queryInstaller()throws Exception{
String team = request.getParameter("team");
getRoot().setRecords(taskComponent.queryInstaller(team));
return JSON_RECORDS;
}
public String cancelTask()throws Exception{
taskComponent.cancelTask(this.task_ids,cancel_remak);
return JSON_SUCCESS;
}
public String responseTask() throws Exception{
if(this.cust_ids == null && this.cust_ids.length == 0){
throw new IllegalArgumentException("客户编号不能为空!");
}
taskComponent.responseTask(revisit , cust_ids[0]);
return JSON;
}
public String queryPrintContent()throws Exception{
String [] tasks = request.getParameterValues("tasks");
if(tasks == null || tasks.length == 0){
return JSON_RECORDS;
}
String[] task_types = new String[tasks.length];
task_ids = new String[tasks.length];
cust_ids = new String[tasks.length];
for (int i = 0 ; i < tasks.length; i++) {
String [] tmp = tasks[i].split("#");
task_types[i] = tmp[0];
cust_ids[i] = tmp[1];
task_ids[i] = tmp[2];
}
List<Map<String,Object>> records = taskComponent.queryPrintContent(task_types, cust_ids, task_ids);
getRoot().setRecords(records);
return JSON_RECORDS;
}
/**
* @return
* @throws Exception
*/
public String modifyBooksTime()throws Exception{
taskComponent.modifyBooksTime(work_id, books_time);
return JSON;
}
/**
* @return
* @throws Exception
*/
public String assignTask()throws Exception{
String team = request.getParameter("team");
taskComponent.assignTask(this.task_ids, team);
return JSON;
}
public String modifyPlanOptr() throws Exception {
taskComponent.modifyPlanOptr(work_id, newRevisitInstallerId);
return JSON;
}
public String queryTaskByTaskId() throws Exception{
getRoot().setSimpleObj(taskComponent.queryTaskByTaskId(work_id));
return JSON_SIMPLEOBJ;
}
public void setTaskComponent(TaskComponent taskComponent) {
this.taskComponent = taskComponent;
}
public void setStopTaskList(String stopTaskList) {
this.stopTaskList = stopTaskList;
}
public void setThreeTaskList(String threeTaskList) {
this.threeTaskList = threeTaskList;
}
public void setStatus(String status) {
this.status = status;
}
public void setTaskCode(String taskCode) {
this.taskCode = taskCode;
}
public void setServType(String servType) {
this.servType = servType;
}
public void setCountyId(String countyId) {
this.countyId = countyId;
}
public void setIsBase(String isBase) {
this.isBase = isBase;
}
public void setTaskCond(TaskQueryConditionDto taskCond) {
this.taskCond = taskCond;
}
public TaskQueryConditionDto getTaskCond() {
return taskCond;
}
public void setTask_ids(String[] task_ids) {
this.task_ids = task_ids;
}
public void setCust_ids(String[] cust_ids) {
this.cust_ids = cust_ids;
}
public void setWork_id(String work_id) {
this.work_id = work_id;
}
public void setBooks_time(String books_time) {
this.books_time = books_time;
}
public void setRevisit(WRevisitInfo revisit) {
this.revisit = revisit;
}
public WRevisitInfo getRevisit() {
return revisit;
}
public void setNewRevisitInstallerId(String newRevisitInstallerId) {
this.newRevisitInstallerId = newRevisitInstallerId;
}
public void setCancel_remak(String cancel_remak) {
this.cancel_remak = cancel_remak;
}
}