package com.cabletech.business.assess.service.impl;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.cabletech.baseinfo.business.entity.UserInfo;
import com.cabletech.business.assess.dao.AssessExaminationDao;
import com.cabletech.business.assess.dao.AssessExaminationDetailDao;
import com.cabletech.business.assess.model.AssessExaminationResult;
import com.cabletech.business.assess.model.AssessMentDetail;
import com.cabletech.business.assess.service.AssessAppraiseService;
import com.cabletech.business.assess.service.AssessMonthAppraiseWorkflowService;
import com.cabletech.business.assess.service.AssessYearAppraiseWorkflowService;
import com.cabletech.business.base.model.SmParameter;
import com.cabletech.business.flowservice.util.ProMockPo;
import com.cabletech.common.base.BaseServiceImpl;
import com.cabletech.common.base.SysConstant;
/**
* 月度考核业务接口实现
*
* @author 杨隽 2012-08-03 创建
*
*/
@SuppressWarnings("all")
@Service
@Transactional
public class AssessAppraiseServiceImpl extends BaseServiceImpl implements
AssessAppraiseService {
@Resource(name = "assessExaminationDao")
private AssessExaminationDao assessExaminationDao;
@Resource(name = "assessExaminationDetailDao")
private AssessExaminationDetailDao assessExaminationDetailDao;
@Resource(name = "assessMonthAppraiseWorkflowService")
private AssessMonthAppraiseWorkflowService monthWorkflowService;
@Resource(name = "assessYearAppraiseWorkflowService")
private AssessYearAppraiseWorkflowService yearWorkflowService;
@Override
protected AssessExaminationDao getBaseDao() {
return assessExaminationDao;
}
@Override
public void save(AssessExaminationResult result, UserInfo user) {
if (StringUtils.isBlank(result.getId())) {
result.setId(null);
}
String[] contentId = result.getContentId();
double sumScore = 0d;
Double[] scores = result.getItemScore();
for (int i = 0; i < contentId.length; i++) {
sumScore += scores[i];
}
result.setInspectionDate(new Date());
result.setInspector(user.getPersonId());
result.setScore(sumScore);
assessExaminationDao.save(result);
String resultId = result.getId();
assessExaminationDetailDao.deleteAll(resultId);
Double[] indicatorsValue = result.getIndicatorsValue();
String[] ratingDescs = result.getRatingDesc();
for (int i = 0; i < contentId.length; i++) {
AssessMentDetail detail = new AssessMentDetail();
detail.setResultId(resultId);
detail.setScore(scores[i]);
detail.setRatingDesc(ratingDescs[i]);
detail.setContentId(contentId[i]);
detail.setIndicatorsValue(indicatorsValue[i]);
assessExaminationDetailDao.save(detail);
}
if (AssessExaminationResult.IS_SUBMITED.equals(result.getIsSubmited())) {
SmParameter parameter = getSmParameter();
if (StringUtils.isBlank(result.getTaskId())) {
doWorkflowStart(result, user, parameter);
} else {
result.setApproveResult(SysConstant.PASS_WORKFLOW_TRANSTION);
doWorkflow(result, user);
}
}
}
@Override
public AssessExaminationResult view(String id) {
AssessExaminationResult result = assessExaminationDao.get(id);
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", id);
List<Map<String, Object>> detailList = assessExaminationDetailDao
.getTableItemContent(map);
int level = assessExaminationDetailDao.getMaxLvItem(map);
result.setDetailList(detailList);
result.setLevel(level);
return result;
}
@Override
public List<Map<String, Object>> queryResultList(
Map<String, String> parameter) {
return assessExaminationDao.queryResultList(parameter);
}
@Override
public void doWorkflow(AssessExaminationResult result, UserInfo user) {
Map<String, Object> map = new HashMap<String, Object>();
ProMockPo taskPi = new ProMockPo();
taskPi.setTaskId(result.getTaskId());
taskPi.setBzid(result.getId());
taskPi.setUserId(user.getId());
taskPi.setUserName(user.getUserName());
taskPi.setTransition(result.getApproveResult());
taskPi.setComment(result.getApproveRemark());
SmParameter smParameter = getSmParameter();
if (AssessExaminationResult.MONTH_ASSESS_.equals(result.getTableType())) {
taskPi = monthWorkflowService.doTask(taskPi, smParameter);
}
if (AssessExaminationResult.YEAR_ASSESS_.equals(result.getTableType())) {
taskPi = yearWorkflowService.doTask(taskPi, smParameter);
}
if (taskPi.isFlowOver()) {
AssessExaminationResult assessExaminationResult = assessExaminationDao
.get(result.getId());
assessExaminationResult.setState(AssessExaminationResult.END_STATE);
assessExaminationDao.save(assessExaminationResult);
}
}
/**
* 获取短信发送参数
*
* @return SmParameter 短信发送参数
*/
private SmParameter getSmParameter() {
return null;
}
/**
* 执行月度考核工作流
*
* @param user
* UserInfo
* @param result
* AssessExaminationResult
* @param smParameter
* SmParameter 短信发送参数
*/
private void doWorkflowStart(AssessExaminationResult result, UserInfo user,
SmParameter smParameter) {
Map<String, Object> map = new HashMap<String, Object>();
ProMockPo taskPi = new ProMockPo();
taskPi.setBzid(result.getId());
taskPi.setUserId(user.getPersonId());
taskPi.setUserName(user.getUserName());
map.put("regiontype", "1");
if (user.isCityMobile()) {
map.put("regiontype", "2");
}
if (user.isProvinceMobile()) {
map.put("regiontype", "3");
}
taskPi.setBzdate(map);
if (AssessExaminationResult.MONTH_ASSESS_.equals(result.getTableType())) {
monthWorkflowService.sendTaskTwoSteps(taskPi, smParameter);
}
if (AssessExaminationResult.YEAR_ASSESS_.equals(result.getTableType())) {
yearWorkflowService.sendTaskTwoSteps(taskPi, smParameter);
}
}
}