package com.vincent.emos.wx.service.impl;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import com.vincent.emos.wx.db.dao.TbMeetingApprovalDao;
import com.vincent.emos.wx.db.dao.TbMeetingDao;
import com.vincent.emos.wx.db.dao.TbUserDao;
import com.vincent.emos.wx.db.pojo.MessageEntity;
import com.vincent.emos.wx.db.pojo.TbMeeting;
import com.vincent.emos.wx.db.pojo.TbMeetingApproval;
import com.vincent.emos.wx.exception.EmosException;
import com.vincent.emos.wx.service.MeetingService;
import com.vincent.emos.wx.task.MessageTask;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@Slf4j
@Service
public class MeetingServiceImpl implements MeetingService {
@Autowired
private TbMeetingDao meetingDao;
@Autowired
private TbMeetingApprovalDao approvalDao;
@Autowired
private TbUserDao userDao;
@Autowired
private MessageTask messageTask;
// 通知回调地址
private String receiveNotify;
//慕课网授权字符串
private String code;
@Override
public void insertMeeting(TbMeeting meeting) {
int row = meetingDao.insertMeeting(meeting);
long id = ((BigInteger) meetingDao.searchMeetingStatus(meeting.getUuid()).get("id")).longValue();
if (row != 1) {
throw new EmosException("会议添加失败");
}
startMeetingWorkflow(id, meeting.getUuid(), meeting.getCreatorId().intValue(),meeting.getTitle());
}
@Override
public ArrayList<HashMap> searchMeetingListByPage(HashMap params) {
ArrayList<HashMap> list = meetingDao.searchMeetingListByPage(params);
String date = "";
ArrayList resultList = new ArrayList();
HashMap resultHashMap = null;
JSONArray array = null;
for (HashMap map : list) {
String tempDate = map.get("date").toString();
if (!tempDate.equals(date)) {
date = tempDate;
resultHashMap = new HashMap();
resultList.add(resultHashMap);
resultHashMap.put("date", date);
array = new JSONArray();
resultHashMap.put("list", array);
}
array.put(map);
}
return resultList;
}
@Override
public HashMap searchMeetingById(int id) {
HashMap map = meetingDao.searchMeetingById(id);
ArrayList<HashMap> list = meetingDao.searchMeetingMembers(id);
map.put("members", list);
return map;
}
@Override
public void updateMeetingInfo(HashMap param) {
int id = (int) param.get("id");
HashMap oldMeeting = meetingDao.searchMeetingById(id);
String uuid = oldMeeting.get("uuid").toString();
Integer creatorId = Integer.parseInt(oldMeeting.get("creatorId").toString());
int row = meetingDao.updateMeetingInfo(param);
if (row != 1) {
throw new EmosException("会议更新失败");
}
// TODO: 2021/2/23 实现工作流
approvalDao.deleteApprovalByUUID(uuid);
//创建新的工作流
startMeetingWorkflow(id, uuid, creatorId,oldMeeting.get("title").toString());
}
@Override
public void deleteMeetingById(int id) {
HashMap meeting = meetingDao.searchMeetingById(id); //查询会议信息
String uuid = meeting.get("uuid").toString();
String instanceId = meeting.get("instanceId").toString();
DateTime date = DateUtil.parse(meeting.get("date") + " " + meeting.get("start"));
DateTime now = DateUtil.date();
//会议开始前20分钟,不能删除会议
if (now.isAfterOrEquals(date.offset(DateField.MINUTE, -20))) {
throw new EmosException("距离会议开始不足20分钟,不能删除会议");
}
int row = meetingDao.deleteMeetingById(id);
if (row != 1) {
throw new EmosException("会议删除失败");
}
// // TODO: 2021/2/23 删除工作流
approvalDao.deleteApprovalByUUID(uuid);
}
@Override
public List<String> searchUserMeetingInMonth(HashMap param) {
return meetingDao.searchUserMeetingInMonth(param);
}
@Override
public ArrayList<HashMap> searchAlreadyApprovalMeeting(int userId) {
//总经理的信息
int gmId = userDao.searchGmId();
HashMap gmInfo = userDao.searchUserInfo(gmId);
ArrayList<HashMap> list;
if (userId == gmId) {
list = approvalDao.searchGMAlreadyApprovalMeeting();
} else {
list = approvalDao.searchMgrAlreadyApprovalMeeting(userId);
}
for (HashMap map : list) {
long creator_id = (long) map.get("creator_id");
long finish_id = (long) map.get("last_user");
int status = (int) map.get("status");
boolean meetingApprovalFinished = status != 1;
JSONArray jsonMembers = JSONUtil.parseArray(map.get("members").toString());
JSONArray jsonApprovals = JSONUtil.parseArray(map.get("approvals").toString());
boolean isSingleDept = jsonMembers.size() == 1;
map.put("sameDept", isSingleDept);
map.put("processStatus", meetingApprovalFinished ? "已结束" : "未结束");
if (isSingleDept) {
if (!meetingApprovalFinished) {
throw new EmosException("会议审批状态错误");
} else {
// HashMap lastUserInfo = userDao.searchUserInfo((int) finish_id);
// map.put("lastUserPhoto", lastUserInfo.get("photo"));
// map.put("lastUserName", lastUserInfo.get("name"));
if (status != 2) {
map.put("result_1", "同意");
map.put("result_2", "同意");
} else {
map.put("result_1", "不同意");
map.put("result_2", "不同意");
}
}
} else {
// map.put("lastUserPhoto", gmInfo.get("photo"));
// map.put("lastUserName", gmInfo.get("name"));
if (meetingApprovalFinished) {
if (status != 2) {
map.put("result_1", "同意");
map.put("result_2", "同意");
} else {
if (finish_id == userId) {
map.put("result_1", "不同意");
} else {
map.put("result_1", "同意");
}
map.put("result_2", "不同意");
}
} else {
map.put("result_1", "同意");
}
}
}
return list;
}
@Override
public ArrayList<HashMap> searchNeedApprovalMeeting(int userId) {
int gmId = userDao.searchGmId();
if (userId == gmId) {
return approvalDao.searchNeedGMApprovalMeeting();
} else {
return approvalDao.searchNeedMgrApprovalMeeting(userId);
}
}
@Override
public int approvalMeeting(HashMap hashMap) {
int userId = (int) hashMap.get("userId");
String uuid = hashMap.get("uuid").toString();
int option = (int) hashMap.get("option");
TbMeetingApproval approval = approvalDao.searchApprovalByUUID(uuid);
JSONArray jsonMembers = JSONUtil.parseArray(approval.getMembers());
JSONArray jsonApprovals;
if (approval.getApprovals() ==