package com.nationalelectric.greenH5;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.nationalelectirc.Constant.ApplyRoleConstant;
import com.nationalelectirc.Constant.Constant;
import com.nationalelectirc.utils.RestResult;
import com.nationalelectric.greenH5.DTO.GreenConstructDTO;
import com.nationalelectric.greenH5.DTO.GreenMealTicketApplyDTO;
import com.nationalelectric.greenH5.bizc.BaseServiceImpl;
import com.nationalelectric.greenH5.bizc.IGreenApplyListBizc;
import com.nationalelectric.greenH5.bizc.IGreenConstructInfoBizc;
import com.nationalelectric.greenH5.bizc.IGreenConstructPersonInfoBizc;
import com.nationalelectric.greenH5.bizc.IGreenOperateLogBizc;
import com.nationalelectric.greenH5.po.GreenApplyList;
import com.nationalelectric.greenH5.po.GreenConstructInfo;
import com.nationalelectric.greenH5.po.GreenConstructPersonInfo;
import com.nationalelectric.greenH5.po.GreenUserInfo;
import com.nationalelectric.greenH5.utils.AesEncryptUtil;
import com.nationalelectric.greenH5.utils.DateUtil;
import com.sgcc.uap.persistence.IHibernateDao;
import com.sgcc.uap.service.validator.ServiceValidatorBaseException;
import com.sgcc.uap.service.validator.ServiceValidatorUtil;
/**
* 概述:
*
* 功能:
*
* @author dell
*/
@Controller
@RequestMapping("/greenConstructInfo")
public class GreenConstructInfoController extends GreenBaseController {
/**
* 施工申请service
*/
@Resource
private IGreenConstructInfoBizc greenconstructinfoBizc;
/**
* HibernateDao逻辑构件
*/
@Autowired
IHibernateDao hibernateDao;
/**
* 施工申请人员service
*/
@Resource
private IGreenConstructPersonInfoBizc greenconstructpersoninfoBizc;
/**
* 我的申请列表service
*/
@Resource
private IGreenApplyListBizc greenApplyListBizc;
/**
* 用户controller
*/
@Resource
private GreenUserInfoController greenUserInfoController;
/**
* 保存图片controller
*/
@Resource
private GreenImageInfoController greenImageInfoController;
@Resource
private IGreenOperateLogBizc greenOperateLogBizc;
@Autowired
private BaseServiceImpl baseService;
/**
* 保存施工申请
*
* @param greenConstructDTO
* @return
*/
@RequestMapping(value = "/saveConstructInfo", method = RequestMethod.POST)
@Transactional(rollbackFor = Exception.class)
public @ResponseBody RestResult saveConstructInfo(@RequestBody Object requestBody) {
GreenConstructDTO greenConstructDTO = new ObjectMapper().convertValue(requestBody,
new TypeReference() {
});
try {
String userId = greenConstructDTO.getUserId();
GreenUserInfo info = getUserInfo(userId);
if (info == null) {
return new RestResult(Constant.FAILED, "非法用户");
}
// 校验
ServiceValidatorUtil.validatorJavaBean(greenConstructDTO);
for (GreenConstructPersonInfo greenConstructPersonInfo : greenConstructDTO.getConstructPersonList()) {
ServiceValidatorUtil.validatorJavaBean(greenConstructPersonInfo);
}
// 开始时间
Date startDate = changeDate(greenConstructDTO.getStartTime());
// 结束时间
Date endDate = changeDate(greenConstructDTO.getEndTime());
// 当前时间
Date nowDate = new Date();
if (startDate == null || endDate == null) {
/*
* greenOperateLogBizc.addLog(Constant.CONSTRUCT,
* Constant.APPLY, Constant.OPERATE_FAIL, "提交施工申请",
* Constant.LOG_OPERATE, greenConstructDTO.getUserId());
*/
return new RestResult(Constant.FAILED, "开始时间、结束时间格式有误,请重新输入!");
}
// 判断开始时间是否小于当前时间
if (nowDate.getTime() > startDate.getTime()) {
/*
* greenOperateLogBizc.addLog(Constant.CONSTRUCT,
* Constant.APPLY, Constant.OPERATE_FAIL, "提交施工申请",
* Constant.LOG_OPERATE, greenConstructDTO.getUserId());
*/
return new RestResult(Constant.FAILED, "开始时间不能小于当前时间,请重新输入!");
}
// 判断结束时间是否小于当前时间
if (nowDate.getTime() > endDate.getTime()) {
/*
* greenOperateLogBizc.addLog(Constant.CONSTRUCT,
* Constant.APPLY, Constant.OPERATE_FAIL, "提交施工申请",
* Constant.LOG_OPERATE, greenConstructDTO.getUserId());
*/
return new RestResult(Constant.FAILED, "结束时间不能小于当前时间,请重新输入!");
}
// 判断开始时间是否大于结束时间
if (startDate.getTime() > endDate.getTime()) {
/*
* greenOperateLogBizc.addLog(Constant.CONSTRUCT,
* Constant.APPLY, Constant.OPERATE_FAIL, "提交施工申请",
* Constant.LOG_OPERATE, greenConstructDTO.getUserId());
*/
return new RestResult(Constant.FAILED, "开始时间不能大于结束时间,请重新输入!");
}
// 获取施工申请信息
GreenConstructInfo greenConstructInfo = new GreenConstructInfo();
// 申请部门名称
greenConstructInfo.setApplyDeptName(greenConstructDTO.getApplyDeptName());
// 项目负责人
greenConstructInfo.setPrincipal(greenConstructDTO.getPrincipal());
// 联系方式
greenConstructInfo.setContactTel(greenConstructDTO.getContactTel());
// 身份证号,要加密处理
String cardno = greenConstructDTO.getIdcardNo();
try {
cardno = AesEncryptUtil.encrypt(cardno);
} catch (Exception e) {
}
greenConstructInfo.setIdcardNo(cardno);
// 业务名称
greenConstructInfo.setBusinessName(greenConstructDTO.getBusinessName());
// 业务内容
greenConstructInfo.setBusinessDetail(greenConstructDTO.getBusinessDetail());
// 施工单位
greenConstructInfo.setConstructCompany(greenConstructDTO.getConstructCompany());
// 开始时间
greenConstructInfo.setStartTime(greenConstructDTO.getStartTime());
// 结束时间
greenConstructInfo.setEndTime(greenConstructDTO.getEndTime());
// 实施方案
// greenConstructInfo.setImplementPlan(greenConstructDTO.getImplementPlan());
String p1 = greenImageInfoController.saveImage(greenConstructDTO.getImplementPlan(), userId);
greenConstructInfo.setImplementPlanData(p1);
baseService.saveImgToIO(p1 + ".jpg", greenConstructDTO.getImplementPlan());
greenConstructInfo.setImplementPlan(p1 + ".jpg");
// 实施发起文件
// greenConstructInfo.setImplementInitiateFile(greenConstructDTO.getImplementInitiateFile());
// greenConstructInfo.setImplementInitiateFile(greenImageInfoController.saveImage(greenConstructDTO.getImplementInitiateFile(),userId));
String p2 = greenImageInfoController.saveImage(greenConstructDTO.getImplementInitiateFile(), userId);
greenConstructInfo.setImplementInitiateFileData(p2);
greenConstructInfo.setImplementInitiateFile(p2 + ".jpg");
baseService.saveImgToIO(p2 + ".jpg", greenConstructDTO.getImplementInitiateFile());
// 用户id
greenConstructInfo.setUserId(greenConstructDTO.getUserId());
// 创建者
greenConstructInfo.setCreator(greenConstructDTO.getUserId().toString());
// 修改者
greenConstructInfo.setModifier(greenConstructDTO.getUserId().toString());
// 创建时间
greenConstructInfo.setGmtCreated(new Date());
// 修改时间
greenConstructInfo.setGmtModified(new Date());
// 删除标记
greenConstructInfo.setIsDeleted("N");
greenConstructInfo.setImgStatus(1);
// 添加访客信息到访客信息表
greenconstructinfoBizc.add(greenConstructInfo);
// 保存施工人员信息
for (GreenConstructPersonInfo greenConstructPersonInfo : greenConstructDTO.getConstructPersonList()) {
// 访客id
greenConstructPersonInfo.setConstructId(greenConstructInfo.getId());
// 创建者
greenConstructPersonInfo.setCreator(greenConstructDTO.getUserId().toString());
// 修改者
greenConstructPersonInfo.setModifier(greenConstructDTO.getUserId().toString());
// 创建时间
greenConstructPersonInfo.setGmtCreated(new Date());
// 修改时间
greenConstructPersonInfo.setGmtModified(new Date());
// 删除标记
greenConstructPersonInfo.setIsDeleted("N");
String cardno_1 = greenConstructPersonInfo.getIdcardNo();
try {
cardno_1 = AesEncryptUtil.encrypt(cardno_1);
} catch (Exception e) {
}
greenConstructPersonInfo.setIdcardNo(cardno_1);
// 执行保存方法
greenconstructpersoninfoBizc.add(greenConstructPersonInfo);
}
// 下面的操作,不在一个事务里,不能这样操作啦
// baseService.saveConstructImage(greenConstructInfo.getId());
// 添加访客信息到申请信息list表
GreenApplyList list = new GreenApplyList();
// 申请人id
list.setUserId(greenConstructDTO.getUserId());
// 申请事项详情ID
list.setDetailId(greenConstructInfo.getId());
// 申请类型
list.setApplyType(Constant.CONSTRUCT_APPLY);
// 申请类型名称
list.setApplyTypeName("施工申请");
// 申请详情1(申请部门)
list.setApplyInfo1(greenConstructDTO.getApplyDeptName());
// 申请详情2(业务名称)
list.setApplyInfo2(greenConstructDTO.getBusinessName());
// 一级审批部门
list.setFirstApproval(ApplyRoleConstant.CONSTRUCT_APPROVE_PROJECT);
// 一级审批状态
// list.setFirstStatus(Constant.APPROVAL_DOING);
// 二级审批部门
list.setSecondApproval(ApplyRoleConstant.CONSTRUCT_APPROVE_DEFEND);
// 二级审批状态
// list.setSecondStatus(Constant.APPROVAL_DOING);
// 三级审批部门
list.setThirdApproval(ApplyRoleConstant.CONSTRUCT_APPROVE_DIRECTOR);
// 三级审批状态
// list.setThirdStatus(Constant.APPROVAL_DOING);
// 四级审批部门
list.setFourthApproval(ApplyRoleConstant.CONSTRUCT_APPROVE_GENERAL);
// 四级审批状态
// list.setFourthStatus(Constant.APPROVAL_DOING);
// 五级审批部门
list.setFifthApproval(ApplyRoleConstant.CONSTRUCT_APPROVE_SECURITY);
// 五级审批状态
// list.setFifthStatus(Constant.APPROVAL_DOING);
// 申请时间
list.setApplyTime(new SimpleDateFormat(DateUtil.Y_M_DH_MI_S).format(new Date()));
// 创建者
list.setCreator(greenConstructDTO.getUserId().toString());
// 修改者
list.setModifier(greenConstructDTO.getUserId().toString());
// 创建时间
list.setGmtCreated(new Date());
// 修改时间
list.setGmtModified(new Date());
// 删除标识
list.setIsDeleted("N");
// 添加申请到申请list表
greenApplyListBizc.add(list);
/*
* greenOperateLogBizc.addLog(Constant.CONSTRUCT, Constant.APPLY,
* Constant.OPERATE_SUCCESS, "提交施工申请", Constant.LOG_OPERATE,
* greenConstructDTO.getUserId());
*/
// 返回结果
return new RestResult(Constant.SUCCESS, "申请成功");
} catch (ServiceValidatorBaseException e) {
e.printStackTrace();
/*
* greenOperateLogBizc.addLog(Constant.CONSTRUCT, Constant.APPLY,
* Constant.OPERATE_FAIL, "提交施工申请", Constant.LOG_ERROR,
* greenConstructDTO.getUserId());
*/
return new RestResult(Constant.FAILED, e.getMessage());
} catch (Exception e) {
e.printStackTrace();
/*
* greenOperateLogBizc.addLog(Constant.CONSTRUCT, Constant.APPLY,
* Constant.OPERATE_FAIL, "提交施工申请", Constant.LOG_ERROR,
* greenConstructDTO.getUserId());
*/
return new RestResult(Constant.FAILED, "申请失败,请重试");
}
}
/**
* 根据id查询施工申请详情
*
* @param id
* @param applyType
* @return
*/
@SuppressWarnings({ "unchecked" })
public List