package com.doumee.service.business.impl;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.doumee.biz.system.SystemDictDataBiz;
|
import com.doumee.core.constants.Constants;
|
import com.doumee.core.constants.ResponseStatus;
|
import com.doumee.core.exception.BusinessException;
|
import com.doumee.core.model.PageData;
|
import com.doumee.core.model.PageWrap;
|
import com.doumee.core.utils.DateUtil;
|
import com.doumee.core.utils.Utils;
|
import com.doumee.core.utils.qiyeweixin.QywxUtil;
|
import com.doumee.core.utils.qiyeweixin.model.request.QywxSendMsgRequest;
|
import com.doumee.core.utils.qiyeweixin.model.request.QywxTextCardMsgRequest;
|
import com.doumee.dao.business.*;
|
import com.doumee.dao.business.model.*;
|
import com.doumee.dao.web.dto.*;
|
import com.doumee.dao.web.vo.WorkOrderDataVO;
|
import com.doumee.service.business.WorkorderService;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.doumee.service.common.EmailService;
|
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.catalina.Manager;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.StringUtils;
|
|
import javax.annotation.Resource;
|
import java.io.Serializable;
|
import java.util.*;
|
import java.util.concurrent.TimeUnit;
|
import java.util.stream.Collectors;
|
|
/**
|
* 工单信息表Service实现
|
* @author 江蹄蹄
|
* @since 2025/04/02 17:49
|
*/
|
@Service
|
@Slf4j
|
public class WorkorderServiceImpl implements WorkorderService {
|
|
@Autowired
|
private WorkorderMapper workorderMapper;
|
|
@Autowired
|
private MultifileMapper multifileMapper;
|
|
@Autowired
|
private WorkorderLogMapper workorderLogMapper;
|
|
@Autowired
|
private SystemDictDataBiz systemDictDataBiz;
|
@Autowired
|
private EmailService emailService;
|
|
@Autowired
|
private MemberMapper memberMapper;
|
|
@Autowired
|
private ManagersMapper managersMapper;
|
|
@Autowired
|
private CategoryMapper categoryMapper;
|
|
@Autowired
|
private NoticesMapper noticesMapper;
|
|
@Resource(name="sessionRedisTemplate")
|
private RedisTemplate<Object, Serializable> redisTemplate;
|
|
|
@Override
|
public Integer create(Workorder workorder) {
|
this.isValidBaseParam(workorder);
|
workorder.setCreateDate(new Date());
|
workorder.setEditDate(new Date());
|
workorder.setMemberId(workorder.getMemberId());
|
workorder.setIsdeleted(Constants.ZERO);
|
workorder.setCode(this.getNextCode(workorder.getType()));
|
//处理人员类信息
|
this.dealNoticeData(workorder);
|
//处理SHE事件状态
|
Constants.WorkOrderStatus workOrderStatus = Constants.equalsInteger(workorder.getType(),Constants.ZERO)?Constants.WorkOrderStatus.close:Constants.WorkOrderStatus.waitConfirm;
|
workorder.setStatus(workOrderStatus.getKey());
|
workorderMapper.insert(workorder);
|
|
//存储DCA 问题记录表
|
this.saveProblemData(workorder);
|
//存储附件信息
|
this.saveMutiFile(workorder);
|
//存储日志
|
this.dealLogData(workorder,workOrderStatus);
|
Member member = memberMapper.selectById(workorder.getMemberId());
|
Category category = categoryMapper.selectById(workorder.getTypeId());
|
if(Objects.nonNull(member)&&Objects.nonNull(category)){
|
// 发送企微通知
|
this.sendQwMsg(workorder,workorder.getQwnoticeMemberIds(),member,category.getName(),Constants.ZERO,null);
|
}
|
//存储待办人员信息
|
this.saveNotice(Arrays.asList(workorder.getQwnoticeMemberIds().split(",")),workorder.getId(),Constants.ZERO,Constants.ZERO);
|
return workorder.getId();
|
}
|
|
|
/**
|
* 发送通知
|
* @param workorder
|
* @param qwIds 消息接收人
|
* @param member 操作人名称
|
* @param categoryName
|
* @param contentType 0=正常通知;1=催促;2=抄送 3=已处理一项/任务已处理
|
* @param csInfo 抄送信息
|
*/
|
public void sendQwMsg(Workorder workorder,String qwIds,Member member,String categoryName,Integer contentType,String csInfo){
|
QywxSendMsgRequest qywxSendMsgRequest = new QywxSendMsgRequest();
|
qywxSendMsgRequest.setMsgtype("text");
|
qywxSendMsgRequest.setTouser(qwIds.replace(",","|"));
|
qywxSendMsgRequest.setAgentid(systemDictDataBiz.queryByCode(Constants.QYWX,Constants.QYWX_AGENTID).getCode());
|
String sendUser = "";
|
if(Objects.nonNull(member)){
|
if(org.apache.commons.lang3.StringUtils.isNotBlank(member.getName())){
|
sendUser = member.getName();
|
}
|
if(org.apache.commons.lang3.StringUtils.isNotBlank(member.getCompanyName())){
|
sendUser = member.getCompanyName()+"/" + sendUser ;
|
}
|
}
|
QywxTextCardMsgRequest textCard = this.dealMessageContent(workorder,sendUser,categoryName,contentType,csInfo);
|
qywxSendMsgRequest.setTextcard(textCard);
|
QywxUtil.sendMsg(systemDictDataBiz.queryByCode(Constants.QYWX,Constants.QYWX_TOKEN).getCode(),
|
qywxSendMsgRequest);
|
}
|
|
|
private static final String [] qwDetailUrls = {"/pages/details_she/details_she","/pages/workOrder_dca/workOrder_dca","","/pages/workOrder_she/workOrder_she"};
|
|
/**
|
* 通知文案整理
|
* @param workorder
|
* @param userName 操作人名称 部门+名称
|
* @param categoryName
|
* @param contentType 0=正常通知;1=催促(跌绊滑/DCA);2=抄送(DCA) 3=已处理一项/任务已处理
|
* @param csInfo 抄送信息
|
* @return
|
*/
|
public QywxTextCardMsgRequest dealMessageContent(Workorder workorder,String userName ,String categoryName,Integer contentType,String csInfo){
|
QywxTextCardMsgRequest textCard = new QywxTextCardMsgRequest();
|
String message = "";
|
textCard.setUrl(qwDetailUrls[workorder.getType()]+"?id="+workorder.getId());
|
if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)){
|
textCard.setTitle("【SHE事件上报】");
|
if(Constants.equalsInteger(workorder.getMemberType(),Constants.ZERO)){
|
message = "本人";
|
}else {
|
message = Constants.equalsInteger(workorder.getMemberType(),Constants.ONE)?"同事":"供应商";
|
}
|
message = message + "-" + workorder.getMemberNames() + " " + DateUtil.formatDate(new Date(),"yyyy-MM-dd HH:mm") + workorder.getLocationName() + categoryName;
|
textCard.setDescription(" <div class=\"normal\">"+message+"</div>");
|
}else{
|
textCard.setTitle(Constants.equalsInteger(workorder.getType(),Constants.ONE)?"【DCA上报】":"跌绊滑风险上报");
|
if(Constants.equalsInteger(workorder.getType(),Constants.THREE)){
|
message = message + " <div class=\"normal\">"+ (org.apache.commons.lang3.StringUtils.isNotBlank(userName)?userName:"系统") + (Constants.equalsInteger(contentType,Constants.ZERO)?"任务分配给你":(Constants.equalsInteger(contentType,Constants.ONE)?"对该工单进行了催促,请尽快处理":"任务已处理")) +"</div>";
|
message = message + " <div class=\"normal\">"+ DateUtil.formatDate(new Date(),"yyyy-MM-dd HH:mm") +"/"+ workorder.getLocationName() +"/"+ categoryName+"</div>";
|
}else{
|
message = message + " <div class=\"normal\">"+ (org.apache.commons.lang3.StringUtils.isNotBlank(userName)?userName:"系统") + (Constants.equalsInteger(contentType,Constants.ZERO)?"任务分配给你":(Constants.equalsInteger(contentType,Constants.ONE)?"对该工单进行了催促,请尽快处理":((Constants.equalsInteger(contentType,Constants.TWO)?"抄送给你":"已处理一项")))) +"</div>";
|
message = message + " <div class=\"normal\">观察主题"+ categoryName +"</div>";
|
message = message + " <div class=\"normal\">符合:"+ workorder.getDcaYesNum() +" 不符合:"+workorder.getDcaNoNum()+"</div>";
|
if(Constants.equalsInteger(contentType,Constants.TWO)){
|
message = message + " <div class=\"normal\">说明:"+ csInfo +"</div>";
|
}
|
}
|
textCard.setDescription(message);
|
}
|
return textCard;
|
}
|
|
|
|
public void dealLogData(Workorder workorder,Constants.WorkOrderStatus workOrderStatus){
|
if (Constants.equalsInteger(workorder.getType(), Constants.THREE) || Constants.equalsInteger(workorder.getType(), Constants.TWO) ) {
|
//处理上报日志 DCA工单 日志存储至子业务 不存在于父级 与跌绊滑
|
String logTitle = Constants.equalsInteger(workorder.getType(), Constants.THREE) ? "跌绊滑风险" : "DCA";
|
this.saveLog(null,workorder,Constants.ZERO,workorder.getMemberId(),workOrderStatus.getLogTitle().replace("{title}",logTitle),null);
|
}
|
}
|
|
/**
|
* 存储附件信息
|
* @param workorder
|
*/
|
public void saveMutiFile(Workorder workorder){
|
List<Multifile> multifileList = workorder.getMultifileList();
|
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
|
for (Multifile multifile:multifileList) {
|
multifile.setIsdeleted(Constants.ZERO);
|
multifile.setObjId(workorder.getId());
|
multifile.setCreateDate(new Date());
|
multifile.setObjType(Constants.multiFileType.upload);
|
}
|
multifileMapper.insert(multifileList);
|
}
|
}
|
|
|
/**
|
* 处理 DCA 提报 问题数据
|
* @param workorder
|
*/
|
public void saveProblemData(Workorder workorder){
|
if(Constants.equalsInteger(workorder.getType(),Constants.TWO)){
|
List<DCANoProblemDTO> dcaNoProblemDTOList = workorder.getDcaNoProblemDTOList();
|
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(dcaNoProblemDTOList)){
|
for (DCANoProblemDTO dcaNoProblemDTO:dcaNoProblemDTOList) {
|
Category problem = categoryMapper.selectById(dcaNoProblemDTO.getProblemId());
|
Constants.WorkOrderStatus workOrderStatus = Constants.WorkOrderStatus.waitConfirm;
|
Workorder dcaWorkOrder = new Workorder();
|
dcaWorkOrder.setCreateDate(new Date());
|
dcaWorkOrder.setEditDate(new Date());
|
dcaWorkOrder.setMemberId(workorder.getMemberId());
|
dcaWorkOrder.setTypeId(workorder.getTypeId());
|
dcaWorkOrder.setCategoryId(Integer.toString(problem.getParentId()));
|
dcaWorkOrder.setType(Constants.TWO);
|
dcaWorkOrder.setStatus(workOrderStatus.getKey());
|
dcaWorkOrder.setIsdeleted(Constants.ZERO);
|
dcaWorkOrder.setProblemTitle(problem.getName());
|
dcaWorkOrder.setProblemId(problem.getId());
|
dcaWorkOrder.setProblemInfo(problem.getRemark());
|
dcaWorkOrder.setDcaRecordId(workorder.getId());
|
dcaWorkOrder.setEventInfo(dcaNoProblemDTO.getEventInfo());
|
workorderMapper.insert(dcaWorkOrder);
|
//存储日志
|
this.dealLogData(dcaWorkOrder,workOrderStatus);
|
List<Multifile> multifileList = dcaNoProblemDTO.getMultifileList();
|
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
|
for (Multifile multifile:multifileList) {
|
multifile.setIsdeleted(Constants.ZERO);
|
multifile.setObjId(dcaWorkOrder.getId());
|
multifile.setCreateDate(new Date());
|
multifile.setObjType(Constants.multiFileType.upload);
|
}
|
multifileMapper.insert(multifileList);
|
}
|
}
|
}
|
}
|
}
|
|
|
|
/**
|
* 处理通知类人员信息
|
* @param workorder
|
*/
|
public void dealNoticeData(Workorder workorder){
|
//SHE上报 提交类型为同事 处理同事信息
|
if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)&&Constants.equalsInteger(workorder.getMemberType(),Constants.ONE)){
|
List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO).in(Member::getQwId,workorder.getMemberQwids().split(",")));
|
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberList)){
|
workorder.setMemberNames(memberList.stream().map(i->i.getName()).collect(Collectors.joining(",")));
|
}
|
}
|
//跌绊滑事件上报 查询SHE负责人
|
if(Constants.equalsInteger(workorder.getType(),Constants.THREE) || Constants.equalsInteger(workorder.getType(),Constants.ONE)){
|
List<Managers> managersList = managersMapper.selectJoinList(Managers.class,new MPJLambdaWrapper<Managers>().selectAll(Managers.class)
|
.selectAs(Member::getName,Managers::getMemberName)
|
.leftJoin(Member.class,Member::getId,Managers::getMemberId)
|
.eq(Managers::getIsdeleted,Constants.ZERO)
|
.eq(Managers::getType,Constants.ZERO).orderByAsc(Managers::getSortnum)
|
);
|
if(Objects.isNull(managersList)){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"未查询到SHE处理抄送人员");
|
}
|
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(managersList)){
|
workorder.setQwnoticeMemberIds(managersList.stream().map(i->i.getMemberId().toString()).collect(Collectors.joining(",")));
|
if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)){
|
workorder.setEmialMemberIds(managersList.stream().map(i->i.getMemberId().toString()).collect(Collectors.joining(",")));
|
}
|
}
|
}
|
|
|
}
|
|
|
/**
|
*
|
* @param beforeJson
|
* @param afterWorkorder
|
* @param objType 操作类型 0任务上报 1任务分配物业主管 2任务分配处理人 3任务处理关闭 4任务催促
|
* @param memberId
|
*/
|
public Integer saveLog(String beforeJson,Workorder afterWorkorder,Integer objType,Integer memberId,String title,String content){
|
WorkorderLog workorderLog = new WorkorderLog();
|
workorderLog.setCreateDate(new Date());
|
workorderLog.setEditDate(new Date());
|
workorderLog.setIsdeleted(Constants.ZERO);
|
workorderLog.setBeforeContent(beforeJson);
|
workorderLog.setAfterContent(JSONObject.toJSONString(afterWorkorder));
|
workorderLog.setParam1(memberId.toString());
|
workorderLog.setObjId(afterWorkorder.getId().toString());
|
workorderLog.setObjType(objType);
|
workorderLog.setTitle(title);
|
workorderLog.setContent(content);
|
workorderLogMapper.insert(workorderLog);
|
return workorderLog.getId();
|
}
|
|
|
/**
|
* 数据校验
|
* @param workorder
|
*/
|
public void isValidBaseParam(Workorder workorder){
|
if(Objects.isNull(workorder)
|
|| Objects.isNull(workorder.getSubmitDate())
|
|| Objects.isNull(workorder.getHappenTime())
|
|| Objects.isNull(workorder.getType())
|
|| Objects.isNull(workorder.getTypeId())
|
|| Objects.isNull(workorder.getLocaltionId())
|
|| !( Constants.equalsInteger(workorder.getType(),Constants.ZERO) || Constants.equalsInteger(workorder.getType(),Constants.ONE) ||Constants.equalsInteger(workorder.getType(),Constants.THREE)
|
)){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST);
|
}
|
//SHE 事件上报
|
if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)){
|
if(Objects.isNull(workorder.getMemberType())
|
|| Objects.isNull(workorder.getOutJiuyi())
|
|| (Constants.equalsInteger(workorder.getOutJiuyi(),Constants.ZERO) && Objects.isNull(workorder.getIsYiwushi()))
|
|| (Constants.equalsInteger(workorder.getIsYiwushi(),Constants.ZERO) && Objects.isNull(workorder.getIsHurted()))
|
|| Objects.isNull(workorder.getWorkRelated())
|
|| (Constants.equalsInteger(workorder.getMemberType(),Constants.TWO) && StringUtils.isEmpty(workorder.getMemberNames()))
|
|| (Constants.equalsInteger(workorder.getMemberType(),Constants.ONE) && StringUtils.isEmpty(workorder.getMemberQwids()))
|
|| org.apache.commons.lang3.StringUtils.isBlank(workorder.getEventInfo())
|
){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST);
|
}
|
}
|
//跌绊滑 事件上报
|
if(Constants.equalsInteger(workorder.getType(),Constants.THREE)){
|
if(org.apache.commons.lang3.StringUtils.isBlank(workorder.getRiskInfo())
|
){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST);
|
}
|
}
|
//DCA 事件上报
|
if(Constants.equalsInteger(workorder.getType(),Constants.ONE)){
|
if(Objects.isNull(workorder.getDcaYesNum())
|
|| Objects.isNull(workorder.getDcaNoNum())
|
|| Objects.isNull(workorder.getCategoryId())
|
){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST);
|
}
|
}
|
|
//数据库数据校验
|
Category typeCategory = categoryMapper.selectById(workorder.getTypeId());
|
if(Objects.isNull(typeCategory)){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST);
|
}
|
Category locationCategory = categoryMapper.selectById(workorder.getLocaltionId());
|
if(Objects.isNull(locationCategory)){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST);
|
}
|
workorder.setLocationName(locationCategory.getNamePath());
|
}
|
|
@Override
|
public Workorder getDetail(Integer id,Member member){
|
Workorder workorder = workorderMapper.selectJoinOne(Workorder.class,
|
new MPJLambdaWrapper<Workorder>()
|
.selectAll(Workorder.class)
|
.selectAs(Member::getPhone,Workorder::getMemberPhone)
|
.selectAs(Member::getName,Workorder::getMemberName)
|
.selectAs(Member::getCompanyName,Workorder::getCompanyName)
|
.select(" c3.name ",Workorder::getTypeName)
|
.select(" c4.name ",Workorder::getCategoryName)
|
.leftJoin(Member.class,Member::getId,Workorder::getMemberId)
|
.leftJoin(" category c3 on t.TYPE_ID = c3.id ") //风险类型
|
.leftJoin(" category c4 on t.CATEGORY_ID = c4.id ") //DCA问题编码
|
.eq(Workorder::getId,id)
|
.last(" limit 1 ")
|
);
|
if(Objects.nonNull(workorder)){
|
this.dealButton(workorder,member);
|
//查询附件信息
|
List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda().eq(Multifile::getIsdeleted,Constants.ZERO)
|
.eq(Multifile::getObjId,workorder.getId()).orderByAsc(Multifile::getId));
|
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
|
String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
|
+systemDictDataBiz.queryByCode(Constants.FTP,Constants.WORKORDER_FILE_PATH).getCode();
|
for (Multifile multifile:multifileList) {
|
multifile.setFileurlFull(path+multifile.getFileurl());
|
}
|
workorder.setMultifileList(multifileList);
|
}
|
}
|
//查询日志信息
|
workorder.setLogList(this.getLogList(workorder.getId()));
|
if(Constants.equalsInteger(workorder.getType(),Constants.ONE)){
|
//如果是DCA提交记录,查询子工单集合
|
Workorder param = new Workorder();
|
param.setIsdeleted(Constants.ZERO);
|
param.setDcaRecordId(workorder.getId());
|
workorder.setDcaChildList(findList(param));
|
}
|
return workorder;
|
}
|
|
public void dealButton(Workorder workorder,Member member){
|
workorder.setPassOnButton(Constants.ZERO);
|
workorder.setCloseButton(Constants.ZERO);
|
if(org.apache.commons.lang3.StringUtils.isNotBlank(member.getQwId())){
|
List<String> closeUserList = new ArrayList<>();
|
closeUserList.addAll(Arrays.asList(workorder.getQwnoticeMemberIds().split(",")));
|
closeUserList.add(org.apache.commons.lang3.StringUtils.isNotBlank(workorder.getManagerId())?workorder.getManagerId():null);
|
closeUserList.add(org.apache.commons.lang3.StringUtils.isNotBlank(workorder.getDealerId())?workorder.getDealerId():null);
|
workorder.setCloseButton(closeUserList.stream().filter(i->i.equals(member.getQwId())).collect(Collectors.toList()).size()>Constants.ZERO?Constants.ONE:Constants.ZERO);
|
List<String> passOnUserList = new ArrayList<>();
|
//待分配状态 处理转交按钮
|
if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitConfirm.getKey())){
|
passOnUserList.addAll(Arrays.asList(workorder.getQwnoticeMemberIds().split(",")));
|
}else if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitAllocation.getKey())){
|
closeUserList.add(workorder.getManagerId());
|
}
|
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(passOnUserList)){
|
workorder.setPassOnButton(passOnUserList.stream().filter(i->i.equals(member.getQwId())).collect(Collectors.toList()).size()>Constants.ZERO?Constants.ONE:Constants.ZERO);
|
}
|
}
|
|
}
|
|
|
public List<WorkorderLog> getLogList(Integer orderId){
|
List<WorkorderLog> logList = workorderLogMapper.selectJoinList(WorkorderLog.class,
|
new MPJLambdaWrapper<WorkorderLog>()
|
.selectAll(WorkorderLog.class)
|
.selectAs(Member::getName,WorkorderLog::getUserName)
|
.selectAs(Member::getCompanyName,WorkorderLog::getCompanyName)
|
.leftJoin(Member.class,Member::getId,WorkorderLog::getParam1)
|
.eq(WorkorderLog::getObjId,orderId)
|
.orderByAsc(WorkorderLog::getId)
|
);
|
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(logList)){
|
String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
|
+systemDictDataBiz.queryByCode(Constants.FTP,Constants.WORKORDER_LOG_FILE_PATH).getCode();
|
for (WorkorderLog workorderLog:logList) {
|
//查询附件信息
|
List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
|
.eq(Multifile::getIsdeleted,Constants.ZERO)
|
.ne(Multifile::getObjType,Constants.multiFileType.upload)
|
.eq(Multifile::getObjId,workorderLog.getId())
|
.orderByAsc(Multifile::getId));
|
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
|
for (Multifile multifile:multifileList) {
|
multifile.setFileurlFull(path+multifile.getFileurl());
|
}
|
workorderLog.setMultifileList(multifileList);
|
}
|
}
|
}
|
return logList;
|
|
}
|
|
|
|
@Override
|
public void deleteById(Integer id) {
|
workorderMapper.deleteById(id);
|
}
|
|
@Override
|
public void delete(Workorder workorder) {
|
UpdateWrapper<Workorder> deleteWrapper = new UpdateWrapper<>(workorder);
|
workorderMapper.delete(deleteWrapper);
|
}
|
|
@Override
|
public void deleteByIdInBatch(List<Integer> ids) {
|
if (CollectionUtils.isEmpty(ids)) {
|
return;
|
}
|
workorderMapper.deleteBatchIds(ids);
|
}
|
|
@Override
|
public void updateById(Workorder workorder) {
|
workorderMapper.updateById(workorder);
|
}
|
|
@Override
|
public void updateByIdInBatch(List<Workorder> workorders) {
|
if (CollectionUtils.isEmpty(workorders)) {
|
return;
|
}
|
for (Workorder workorder: workorders) {
|
this.updateById(workorder);
|
}
|
}
|
|
@Override
|
public Workorder findById(Integer id) {
|
return workorderMapper.selectById(id);
|
}
|
|
@Override
|
public Workorder findOne(Workorder workorder) {
|
QueryWrapper<Workorder> wrapper = new QueryWrapper<>(workorder);
|
return workorderMapper.selectOne(wrapper);
|
}
|
|
@Override
|
public List<Workorder> findList(Workorder pageWrap) {
|
|
return workorderMapper.selectJoinList(Workorder.class,getJoinQueryMapper(pageWrap));
|
}
|
|
private MPJLambdaWrapper<Workorder> getJoinQueryMapper(Workorder pageWrap) {
|
MPJLambdaWrapper<Workorder> queryWrapper = new MPJLambdaWrapper<>();
|
pageWrap.setIsdeleted(Constants.ZERO);
|
queryWrapper
|
.selectAll(Workorder.class)
|
.selectAs(Member::getName,Workorder::getMemberName)
|
.selectAs(Member::getCompanyName,Workorder::getCompanyName)
|
.selectAs(Member::getPhone,Workorder::getMemberPhone)
|
.select(" c2.name ",Workorder::getCategoryName)
|
.select(" c3.name ",Workorder::getTypeName)
|
.leftJoin(Member.class,Member::getId,Workorder::getMemberId)
|
.leftJoin(" category c3 on t.TYPE_ID = c3.id ") //风险类型
|
.leftJoin(" category c2 on t.CATEGORY_ID = c2.id ") //DCA一级问题编码
|
.eq( pageWrap.getId() != null, Workorder::getId, pageWrap.getId())
|
.eq( pageWrap.getCreator() != null, Workorder::getCreator, pageWrap.getCreator())
|
.ge( pageWrap.getCreateDate() != null, Workorder::getCreateDate, Utils.Date.getStart( pageWrap.getCreateDate()))
|
.le( pageWrap.getCreateDate() != null, Workorder::getCreateDate, Utils.Date.getEnd( pageWrap.getCreateDate()))
|
.eq( pageWrap.getEditor() != null, Workorder::getEditor, pageWrap.getEditor())
|
.ge( pageWrap.getEditDate() != null, Workorder::getEditDate, Utils.Date.getStart( pageWrap.getEditDate()))
|
.le( pageWrap.getEditDate() != null, Workorder::getEditDate, Utils.Date.getEnd( pageWrap.getEditDate()))
|
.eq( pageWrap.getIsdeleted() != null, Workorder::getIsdeleted, pageWrap.getIsdeleted())
|
.eq( pageWrap.getCategoryId() != null, Workorder::getCategoryId, pageWrap.getCategoryId())
|
.eq( pageWrap.getRemark() != null, Workorder::getRemark, pageWrap.getRemark())
|
.eq( pageWrap.getStatus() != null, Workorder::getStatus, pageWrap.getStatus())
|
.eq( pageWrap.getSortnum() != null, Workorder::getSortnum, pageWrap.getSortnum())
|
.eq( pageWrap.getType() != null, Workorder::getType, pageWrap.getType())
|
.eq( pageWrap.getMemberId() != null, Workorder::getMemberId, pageWrap.getMemberId())
|
.eq( pageWrap.getCompanyId() != null, Workorder::getCompanyId, pageWrap.getCompanyId())
|
.eq( pageWrap.getSubmitDate() != null, Workorder::getSubmitDate, pageWrap.getSubmitDate())
|
.eq( pageWrap.getMemberType() != null, Workorder::getMemberType, pageWrap.getMemberType())
|
.eq( pageWrap.getMemberQwids() != null, Workorder::getMemberQwids, pageWrap.getMemberQwids())
|
.like( pageWrap.getMemberNames() != null, Workorder::getMemberNames, pageWrap.getMemberNames())
|
.eq( pageWrap.getLocaltionId() != null, Workorder::getLocaltionId, pageWrap.getLocaltionId())
|
.eq( pageWrap.getOutJiuyi() != null, Workorder::getOutJiuyi, pageWrap.getOutJiuyi())
|
.eq( pageWrap.getIsYiwushi() != null, Workorder::getIsYiwushi, pageWrap.getIsYiwushi())
|
.eq( pageWrap.getIsHurted() != null, Workorder::getIsHurted, pageWrap.getIsHurted())
|
.eq( pageWrap.getWorkRelated() != null, Workorder::getWorkRelated, pageWrap.getWorkRelated())
|
.eq( pageWrap.getEventInfo() != null, Workorder::getEventInfo, pageWrap.getEventInfo())
|
.eq( pageWrap.getEmialMemberIds() != null, Workorder::getEmialMemberIds, pageWrap.getEmialMemberIds())
|
.eq( pageWrap.getQwnoticeMemberIds() != null, Workorder::getQwnoticeMemberIds, pageWrap.getQwnoticeMemberIds())
|
.eq( pageWrap.getHappenTime() != null, Workorder::getHappenTime, pageWrap.getHappenTime())
|
.eq( pageWrap.getTypeId() != null, Workorder::getTypeId, pageWrap.getTypeId())
|
.eq( pageWrap.getRiskInfo() != null, Workorder::getRiskInfo, pageWrap.getRiskInfo())
|
.eq( pageWrap.getManagerId() != null, Workorder::getManagerId, pageWrap.getManagerId())
|
.eq( pageWrap.getDealerId() != null, Workorder::getDealerId, pageWrap.getDealerId())
|
.ge( pageWrap.getDispatchTime() != null, Workorder::getDispatchTime, Utils.Date.getStart( pageWrap.getDispatchTime()))
|
.le( pageWrap.getDispatchTime() != null, Workorder::getDispatchTime, Utils.Date.getEnd( pageWrap.getDispatchTime()))
|
.eq( pageWrap.getDispatchInfo() != null, Workorder::getDispatchInfo, pageWrap.getDispatchInfo())
|
.ge( pageWrap.getDealTime() != null, Workorder::getDealTime, Utils.Date.getStart( pageWrap.getDealTime()))
|
.le( pageWrap.getDealTime() != null, Workorder::getDealTime, Utils.Date.getEnd( pageWrap.getDealTime()))
|
.eq( pageWrap.getDealInfo() != null, Workorder::getDealInfo, pageWrap.getDealInfo())
|
.eq( pageWrap.getProblemTitle() != null, Workorder::getProblemTitle, pageWrap.getProblemTitle())
|
.eq( pageWrap.getProblemId() != null, Workorder::getProblemId, pageWrap.getProblemId())
|
.eq( pageWrap.getProblemInfo() != null, Workorder::getProblemInfo, pageWrap.getProblemInfo())
|
.eq( pageWrap.getLocationName() != null, Workorder::getLocationName, pageWrap.getLocationName())
|
.like( pageWrap.getCode() != null, Workorder::getCode, pageWrap.getCode())
|
.eq( pageWrap.getDcaYesNum() != null, Workorder::getDcaYesNum, pageWrap.getDcaYesNum())
|
.eq( pageWrap.getDcaNoNum() != null, Workorder::getDcaNoNum, pageWrap.getDcaNoNum())
|
.eq( pageWrap.getDcaRecordId() != null, Workorder::getDcaRecordId, pageWrap.getDcaRecordId())
|
.eq( pageWrap.getDcaCsIds() != null, Workorder::getDcaCsIds, pageWrap.getDcaCsIds()) ;
|
if ( pageWrap.getMemberName() != null) {
|
queryWrapper.and( ms->ms.like(Member::getName, pageWrap.getMemberName())
|
.or().like(Member::getPhone, pageWrap.getMemberName()) );
|
}
|
queryWrapper.orderByDesc(Workorder::getProblemId);
|
return queryWrapper;
|
}
|
|
@Override
|
public PageData<Workorder> findPage(PageWrap<Workorder> pageWrap) {
|
IPage<Workorder> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
|
Utils.MP.blankToNull(pageWrap.getModel());
|
pageWrap.getModel().setIsdeleted(Constants.ZERO);
|
MPJLambdaWrapper<Workorder> queryWrapper = getJoinQueryMapper(pageWrap.getModel());
|
return PageData.from(workorderMapper.selectJoinPage(page,Workorder.class, queryWrapper));
|
}
|
|
@Override
|
public long count(Workorder workorder) {
|
QueryWrapper<Workorder> wrapper = new QueryWrapper<>(workorder);
|
return workorderMapper.selectCount(wrapper);
|
}
|
|
public String getNextCode(Integer type){
|
String date = DateUtil.getFomartDate(new Date(),"yyyyMMddHHmmss");
|
String key = "S";
|
if(Constants.equalsInteger(type,Constants.ONE)){
|
key = "D";
|
}else if(Constants.equalsInteger(type,Constants.THREE)){
|
key = "A";
|
}
|
String code = redisTemplate.opsForValue().get(key+"_CODE").toString();
|
if(StringUtils.isEmpty(code)){
|
code = "01";
|
}
|
redisTemplate.opsForValue().set(key+"_CODE",Integer.valueOf(code)+1);
|
return key + date + org.apache.commons.lang3.StringUtils.leftPad(code,2,"0");
|
}
|
|
|
|
@Override
|
public void initializationCode(){
|
redisTemplate.opsForValue().set("A_CODE",1);
|
redisTemplate.opsForValue().set("S_CODE",1);
|
redisTemplate.opsForValue().set("D_CODE",1);
|
}
|
|
|
|
@Override
|
public void closeWorkOrder(CloseDTO closeDTO){
|
if(Objects.isNull(closeDTO)
|
|| Objects.isNull(closeDTO.getWorkorderId())
|
|| org.apache.commons.lang3.StringUtils.isBlank(closeDTO.getInfo())
|
|| com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(closeDTO.getMultifileList())){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST);
|
}
|
Workorder workorder = workorderMapper.selectById(closeDTO.getWorkorderId());
|
String beforeJson = JSONObject.toJSONString(workorder);
|
if(Objects.isNull(workorder)){
|
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到工单数据");
|
}
|
if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)||Constants.equalsInteger(workorder.getType(),Constants.ONE)){
|
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"SHE、DCA工单无法进行该操作");
|
}
|
if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.sheClose.getKey())||Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.wtsClose.getKey())||Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.close.getKey())){
|
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"工单状态已流转");
|
}
|
//企微通知人 企微主键
|
List<String> qwIds = new ArrayList<>();
|
//提交后的 待确认/待初审状态 如果去关闭 只有工单里绑定的SHE人员可以关闭
|
if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitConfirm.getKey())){
|
//判断SHE人员内是否有当前登录账号
|
if(workorder.getQwnoticeMemberIds().indexOf(closeDTO.getMember().getQwId())<Constants.ZERO){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,当前工单非您的工单,无法进行处理");
|
}
|
workorder.setStatus(Constants.WorkOrderStatus.sheClose.getKey());
|
qwIds = Arrays.asList(workorder.getQwnoticeMemberIds());
|
qwIds.remove(closeDTO.getMember().getQwId());
|
}else if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitAllocation.getKey())){
|
//判断SHE人员内是否有当前登录账号
|
if(workorder.getQwnoticeMemberIds().indexOf(closeDTO.getMember().getQwId())<Constants.ZERO && !workorder.getManagerId().equals(closeDTO.getMember().getQwId())){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,当前工单非您的工单,无法进行处理");
|
}
|
workorder.setStatus(Constants.WorkOrderStatus.wtsClose.getKey());
|
qwIds = Arrays.asList(workorder.getQwnoticeMemberIds());
|
qwIds.add(workorder.getManagerId());
|
qwIds.remove(closeDTO.getMember().getQwId());
|
}else if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitDeal.getKey())){
|
//判断SHE人员内是否有当前登录账号
|
if(workorder.getQwnoticeMemberIds().indexOf(closeDTO.getMember().getQwId())<Constants.ZERO && !workorder.getManagerId().equals(closeDTO.getMember().getQwId())
|
&& !workorder.getDealerId().equals(closeDTO.getMember().getQwId()) ){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,当前工单非您的工单,无法进行处理");
|
}
|
workorder.setStatus(Constants.WorkOrderStatus.wtsClose.getKey());
|
qwIds = Arrays.asList(workorder.getQwnoticeMemberIds());
|
qwIds.add(workorder.getDealerId());
|
qwIds.remove(closeDTO.getMember().getQwId());
|
}else{
|
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"工单状态已流转");
|
}
|
workorder.setEditDate(new Date());
|
workorder.setDealTime(new Date());
|
workorder.setDealInfo(closeDTO.getInfo());
|
workorderMapper.updateById(workorder);
|
//处理上报日志
|
Integer logId = this.saveLog(beforeJson,workorder,Constants.THREE,workorder.getMemberId(),"任务已处理",closeDTO.getInfo());
|
List<Multifile> multifileList = workorder.getMultifileList();
|
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
|
for (Multifile multifile:multifileList) {
|
multifile.setObjId(logId);
|
multifile.setCreateDate(new Date());
|
multifile.setObjType(Constants.multiFileType.deal);
|
}
|
multifileMapper.insert(multifileList);
|
}
|
//发送企微通知
|
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(qwIds)){
|
Set<String> qwIdSet = new HashSet<>(qwIds);
|
String qwIdStr = String.join(",", qwIdSet);
|
Category category = categoryMapper.selectById(workorder.getTypeId());
|
if(Objects.nonNull(closeDTO.getMember())&&Objects.nonNull(category)&& org.apache.commons.lang3.StringUtils.isNotBlank(qwIdStr)){
|
// 发送企微通知
|
this.sendQwMsg(workorder,qwIdStr,closeDTO.getMember(),category.getName(),Constants.THREE,null);
|
}
|
}
|
|
}
|
|
|
@Override
|
public void passOn(PassOnDTO passOnDTO){
|
if(Objects.isNull(passOnDTO)
|
|| Objects.isNull(passOnDTO.getWorkorderId())
|
|| Objects.isNull(passOnDTO.getPassOnUserId())
|
){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST);
|
}
|
Member member = memberMapper.selectById(passOnDTO.getPassOnUserId());
|
if(Objects.isNull(member)){
|
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到被转交人信息");
|
}
|
Workorder workorder = workorderMapper.selectById(passOnDTO.getWorkorderId());
|
String beforeJson = JSONObject.toJSONString(workorder);
|
if(Objects.isNull(workorder)){
|
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到工单数据");
|
}
|
if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)){
|
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"SHE工单无法进行该操作");
|
}
|
if(Constants.equalsInteger(passOnDTO.getPassOnType(),Constants.ZERO)){
|
if(!Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitConfirm.getKey())){
|
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"工单状态已流转");
|
}
|
workorder.setManagerId(member.getQwId());
|
workorder.setStatus(Constants.WorkOrderStatus.waitAllocation.getKey());
|
}else{
|
if(!(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitAllocation.getKey())
|
|| Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitDeal.getKey()))){
|
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"工单状态已流转");
|
}
|
workorder.setDealerId(member.getQwId());
|
workorder.setStatus(Constants.WorkOrderStatus.waitDeal.getKey());
|
}
|
workorder.setEditDate(new Date());
|
workorder.setUrgeDate(DateUtil.afterHoursDate(new Date(),24));
|
workorderMapper.updateById(workorder);
|
//处理上报日志
|
Integer logId = this.saveLog(beforeJson,workorder,
|
Constants.equalsInteger(passOnDTO.getPassOnType(),Constants.ZERO)?Constants.ONE:Constants.TWO
|
,workorder.getMemberId(),"任务分配",passOnDTO.getInfo());
|
List<Multifile> multifileList = workorder.getMultifileList();
|
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
|
for (Multifile multifile:multifileList) {
|
multifile.setObjId(logId);
|
multifile.setIsdeleted(Constants.ZERO);
|
multifile.setCreateDate(new Date());
|
multifile.setObjType(Constants.multiFileType.passOn);
|
}
|
multifileMapper.insert(multifileList);
|
}
|
//企业微信通知
|
Category category = categoryMapper.selectById(workorder.getTypeId());
|
if(Objects.nonNull(passOnDTO.getMember())&&Objects.nonNull(category)){
|
// 发送企微通知
|
this.sendQwMsg(workorder,member.getQwId(),passOnDTO.getMember(),category.getName(),Constants.ZERO,null);
|
}
|
//存储待办人员信息
|
this.saveNotice(Arrays.asList(passOnDTO.getMember().getQwId().split(",")),workorder.getId(),Constants.ZERO,Constants.TWO);
|
}
|
|
|
@Override
|
public void sendCopy(SendCopyDTO sendCopyDTO) {
|
if (Objects.isNull(sendCopyDTO)
|
|| Objects.isNull(sendCopyDTO.getWorkorderId())
|
|| StringUtils.isEmpty(sendCopyDTO.getUserIds())) {
|
throw new BusinessException(ResponseStatus.BAD_REQUEST);
|
}
|
Workorder workorder = workorderMapper.selectById(sendCopyDTO.getWorkorderId());
|
if (Objects.isNull(workorder)) {
|
throw new BusinessException(ResponseStatus.DATA_EMPTY);
|
}
|
List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted, Constants.ZERO)
|
.isNotNull(Member::getQwId)
|
.in(Member::getId, sendCopyDTO.getUserIds().split(",")));
|
if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberList)) {
|
List<String> qwIdList = memberList.stream().map(i -> i.getQwId()).collect(Collectors.toList());
|
Category category = categoryMapper.selectById(workorder.getTypeId());
|
if (Objects.nonNull(category)) {
|
// 发送企微通知
|
this.sendQwMsg(workorder, String.join(",", qwIdList), sendCopyDTO.getMember(), category.getName(), Constants.ONE, null);
|
}
|
//存储待办信息
|
this.saveNotice(qwIdList, workorder.getId(), Constants.ONE, Constants.ONE);
|
}
|
|
}
|
@Override
|
public void sendSheEmail(){
|
if(Constants.WORKORDER_SHE_EMAIL_SENDING){
|
return;
|
}
|
Constants.WORKORDER_SHE_EMAIL_SENDING = true;
|
try {
|
List<Workorder> list = workorderMapper.selectJoinList(Workorder.class,new MPJLambdaWrapper<Workorder>()
|
.selectAll(Workorder.class)
|
.selectAs(Member::getName,Workorder::getMemberName)
|
.selectAs(Member::getCompanyName,Workorder::getCompanyName)
|
.selectAs(Member::getPhone,Workorder::getMemberPhone)
|
.select(" c2.name_path ",Workorder::getCategoryName)
|
.select(" c3.name_path ",Workorder::getTypeName)
|
.leftJoin(Member.class,Member::getId,Workorder::getMemberId)
|
.leftJoin(" category c3 on t.TYPE_ID = c3.id ") //风险类型
|
.leftJoin(" category c2 on t.CATEGORY_ID = c2.id ") //DCA一级问题编码
|
.eq(Workorder::getIsdeleted,Constants.ZERO)
|
.eq(Workorder::getEmailStatus,Constants.ZERO)
|
.eq(Workorder::getType,Constants.ZERO)
|
.isNotNull(Workorder::getEmialMemberIds )//邮箱通知
|
);
|
if(list!=null && list.size()>0){
|
Date date = new Date();
|
String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
|
+systemDictDataBiz.queryByCode(Constants.FTP,Constants.WORKORDER_FILE_PATH).getCode();
|
for(Workorder workorder :list){
|
dealEmailBiz(workorder,date,path);
|
}
|
}
|
|
}catch (Exception e){
|
log.error("==================定时发生SHE邮件失败:"+e.getMessage());
|
}finally {
|
Constants.WORKORDER_SHE_EMAIL_SENDING = false;
|
}
|
|
|
}
|
@Transactional
|
private void dealEmailBiz(Workorder workorder, Date date,String path) {
|
List<Notices> noticesList = new ArrayList<>();
|
int status =1;
|
String info ="邮箱已发送:";
|
String ids = workorder.getEmialMemberIds();
|
List<Member> memberList = getEmailMemberlistByIDs(ids);
|
if(memberList == null || memberList.size() ==0){
|
status = 2;
|
info ="无效员工信息,无法发送邮箱";
|
}else{
|
List<String> successInfo = new ArrayList<>();
|
List<String> errorInfo = new ArrayList<>();
|
Map<String,String> contentForm = getEmailContentFormByModel(workorder);
|
List<String> imgList = getEmailImglistByModel(workorder,path);
|
for(Member m : memberList){
|
if(org.apache.commons.lang3.StringUtils.isNotBlank(m.getEmail())){
|
//如果邮箱不为空,进行邮箱发送
|
successInfo.add(m.getName()+"邮箱"+m.getEmail()+"");
|
if( emailService.sendEmailWithImages(m.getEmail(),"SHE事件工单上报通知", contentForm,imgList)){
|
Notices notices = new Notices();
|
notices.setType(Constants.THREE+"");
|
notices.setIsdeleted(Constants.ZERO);
|
notices.setObjId(workorder.getId());
|
notices.setTitle("SHE事件工单上报邮件通知");
|
notices.setContent(JSONObject.toJSONString(contentForm));
|
notices.setRemark(JSONObject.toJSONString(imgList));
|
notices.setObjType(Constants.ZERO+"");
|
notices.setStatus(Constants.ZERO);
|
notices.setSendacopy(Constants.ONE);
|
notices.setMemberId(m.getId());
|
noticesList.add(notices);
|
}else{
|
errorInfo.add(m.getName()+"/无邮箱");
|
}
|
}else{
|
errorInfo.add(m.getName()+"/邮箱"+m.getEmail()+"");
|
}
|
|
}
|
info += "成功:"+JSONObject.toJSONString(successInfo) +"失败:"+JSONObject.toJSONString(errorInfo);
|
}
|
|
Workorder update = new Workorder();
|
update.setId(workorder.getId());
|
update.setEmailDate(date);
|
update.setEmailStatus(status );
|
update.setEmailInfo(info);
|
this.updateById(update);//更新工单邮件发送状态
|
if(noticesList.size()>0){
|
noticesMapper.insert(noticesList);
|
}
|
}
|
|
private List<String> getEmailImglistByModel(Workorder workorder, String path ) {
|
List<String> list = new ArrayList<>();
|
//查询附件信息
|
List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda().eq(Multifile::getIsdeleted,Constants.ZERO)
|
.eq(Multifile::getObjId,workorder.getId()).orderByAsc(Multifile::getId));
|
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
|
for (Multifile multifile:multifileList) {
|
list.add(path+multifile.getFileurl());
|
}
|
}
|
return list;
|
}
|
|
private List<Member> getEmailMemberlistByIDs(String ids) {
|
List<Member> memberList = new ArrayList<>();
|
if(org.apache.commons.lang3.StringUtils.isNotBlank(ids)){
|
String[] tt = ids.split(",");
|
List<Integer> idList =new ArrayList<>();
|
if(tt.length>0){
|
for(String s :tt){
|
try {
|
idList.add(Integer.parseInt(s));
|
}catch (Exception e){
|
|
}
|
}
|
}
|
if(idList.size()>0){
|
memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
|
.eq(Member::getIsdeleted,Constants.ZERO)
|
.in(Member::getId,idList)
|
);
|
}
|
}
|
|
return memberList;
|
}
|
|
private Map<String, String> getEmailContentFormByModel(Workorder workorder) {
|
Map<String, String> map = new LinkedHashMap<>();
|
map.put("上报人",workorder.getMemberName()+"/" +workorder.getCompanyName());
|
map.put("上报时间",DateUtil.getPlusTime2(workorder.getSubmitDate()));
|
map.put("事件发生时间/地点",DateUtil.getPlusTime2(workorder.getHappenTime())+"/"+workorder.getLocationName());
|
map.put("伤害类型", workorder.getTypeName());
|
map.put("是否外部就医", Constants.equalsInteger(workorder.getOutJiuyi(),Constants.ONE)?"是":"否");
|
map.put("是否医务室", Constants.equalsInteger(workorder.getIsYiwushi(),Constants.ONE)?"是":"否");
|
map.put("是否受伤", Constants.equalsInteger(workorder.getIsHurted(),Constants.ONE)?"是":"否");
|
map.put("是否和工作相关", Constants.equalsInteger(workorder.getWorkRelated(),Constants.ONE)?"是":"否");
|
map.put("事件说明", org.apache.commons.lang3.StringUtils.defaultString(workorder.getEventInfo(),"-"));
|
return map;
|
}
|
|
@Override
|
@Transactional(rollbackFor = {BusinessException.class,Exception.class})
|
public void urge(Integer workorderId,Member member){
|
Workorder workorder = workorderMapper.selectById(workorderId);
|
workorder.setEditDate(new Date());
|
workorder.setUrgeDate(DateUtil.afterHoursDate(new Date(),24));
|
workorderMapper.updateById(workorder);
|
if(Objects.isNull(workorder)){
|
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到工单数据");
|
}
|
Member urgeUser = new Member();
|
//如果已分配 wts 则是催促wts
|
if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitAllocation.getKey())){
|
urgeUser = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO).eq(Member::getQwId,workorder.getManagerId()).last("limit 1 "));
|
}else if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitAllocation.getKey())){
|
urgeUser = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO).eq(Member::getQwId,workorder.getDealerId()).last("limit 1 "));
|
}else{
|
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"状态已流转无法进行该操作");
|
}
|
|
this.saveLog(null,workorder,
|
Constants.ONE
|
,member.getId(),"催促","已催促 "+urgeUser.getCompanyName() + "/" + urgeUser.getName());
|
//发送企微通知
|
Category category = categoryMapper.selectById(workorder.getTypeId());
|
if(Objects.nonNull(category)){
|
// 发送企微通知
|
this.sendQwMsg(workorder,urgeUser.getQwId(),null,category.getName(),Constants.ONE,null);
|
}
|
|
}
|
|
@Override
|
public void jobUrge(){
|
List<Workorder> workorderList = workorderMapper.selectList(new QueryWrapper<Workorder>().lambda().eq(Workorder::getIsdeleted,Constants.ZERO)
|
.in(Workorder::getStatus,Constants.WorkOrderStatus.waitAllocation.getKey(),Constants.WorkOrderStatus.waitDeal.getKey())
|
.apply(" urge_time > now() ")
|
);
|
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(workorderList)){
|
for (Workorder workorder:workorderList) {
|
this.autoUrge(workorder);
|
workorder.setEditDate(new Date());
|
workorder.setUrgeDate(DateUtil.afterHoursDate(new Date(),24));
|
workorderMapper.updateById(workorder);
|
}
|
}
|
}
|
|
|
|
public void autoUrge(Workorder workorder){
|
if(Objects.isNull(workorder)){
|
return;
|
}
|
Member urgeUser = new Member();
|
//如果已分配 wts 则是催促wts
|
if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitAllocation.getKey())){
|
urgeUser = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO).eq(Member::getQwId,workorder.getManagerId()).last("limit 1 "));
|
}else if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitAllocation.getKey())){
|
urgeUser = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO).eq(Member::getQwId,workorder.getDealerId()).last("limit 1 "));
|
}else{
|
return;
|
}
|
//发送企微通知
|
Category category = categoryMapper.selectById(workorder.getTypeId());
|
if(Objects.nonNull(category)){
|
// 发送企微通知
|
this.sendQwMsg(workorder,urgeUser.getQwId(),null,category.getName(),Constants.ONE,null);
|
}
|
}
|
|
|
public void saveNotice(List<String> qwIdList ,Integer workorderId,Integer isSendCopy,Integer type){
|
List<Notices> noticesList = new ArrayList<>();
|
for (String qwId:qwIdList) {
|
//存储抄送记录
|
Notices notices = new Notices();
|
notices.setCreateDate(new Date());
|
notices.setIsdeleted(Constants.ZERO);
|
notices.setObjId(workorderId);
|
notices.setObjType(Constants.ZERO+"");
|
notices.setStatus(Constants.ZERO);
|
notices.setSendacopy(isSendCopy);
|
notices.setParam1(qwId);
|
notices.setType(Integer.toString(type));
|
noticesList.add(notices);
|
}
|
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(noticesList)){
|
noticesMapper.insert(noticesList);
|
}
|
}
|
|
|
|
/**
|
* SHE / 跌绊滑报表
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public List<WorkOrderDataVO> getWorkOrderData(OrderDataDTO orderDataDTO) throws Exception {
|
if (Objects.isNull(orderDataDTO.getQueryType())||Objects.isNull(orderDataDTO.getOrderType())) {
|
throw new BusinessException(ResponseStatus.BAD_REQUEST);
|
}
|
String year = DateUtil.getNowYear();
|
Integer nowMonth = DateUtil.getNowMonth();
|
Integer quarter = (nowMonth - 1) / 3 + 1;
|
List<WorkOrderDataVO> workOrderDataVOList = new ArrayList<>();
|
//查询今年所有的数据
|
List<Workorder> workorderList = workorderMapper.selectJoinList(Workorder.class,new MPJLambdaWrapper<Workorder>()
|
.selectAll(Workorder.class)
|
.leftJoin(" category c1 on c1.id = t.type_id " )
|
.leftJoin(" category c2 on c2.id = t.localtion_id " )
|
.apply(Objects.nonNull(orderDataDTO.getTypeId())," find_in_set("+orderDataDTO.getTypeId()+", REPLACE(c1.ID_PATH,'/',',') ) ")
|
.apply(Objects.nonNull(orderDataDTO.getLocationId())," find_in_set("+orderDataDTO.getLocationId()+", REPLACE(c2.ID_PATH,'/',',') ) ")
|
.like(Workorder::getCreateDate,year)
|
.eq(Workorder::getType,orderDataDTO.getOrderType())
|
.eq(Workorder::getIsdeleted,Constants.ZERO));
|
if(Constants.equalsInteger(orderDataDTO.getQueryType(),Constants.ZERO)){
|
for (int i = 1 ; i <= nowMonth; i++) {
|
WorkOrderDataVO workOrderDataVO = new WorkOrderDataVO();
|
String monthDay = year + "-" + org.apache.commons.lang3.StringUtils.leftPad(nowMonth.toString(),2,"0");
|
List<Workorder> dataList = workorderList.stream().filter(j->DateUtil.formatDate(j.getCreateDate(),"yyyy-MM").equals(monthDay))
|
.collect(Collectors.toList());
|
workOrderDataVO.setDateStr(monthDay);
|
workOrderDataVO.setGcsTotal(Constants.ZERO);
|
workOrderDataVO.setWtsTotal(Constants.ZERO);
|
workOrderDataVO.setSheTotal(Constants.ZERO);
|
workOrderDataVO.setUnCloseTotal(Constants.ZERO);
|
workOrderDataVO.setTotal(Constants.ZERO);
|
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(dataList)){
|
workOrderDataVO.setTotal(dataList.size());
|
workOrderDataVO.setGcsTotal(dataList.stream().filter(j->Constants.equalsInteger(j.getStatus(),Constants.WorkOrderStatus.close.getKey())).collect(Collectors.toList()).size());
|
workOrderDataVO.setSheTotal(dataList.stream().filter(j->Constants.equalsInteger(j.getStatus(),Constants.WorkOrderStatus.sheClose.getKey())).collect(Collectors.toList()).size());
|
workOrderDataVO.setWtsTotal(dataList.stream().filter(j->Constants.equalsInteger(j.getStatus(),Constants.WorkOrderStatus.wtsClose.getKey())).collect(Collectors.toList()).size());
|
workOrderDataVO.setUnCloseTotal(workOrderDataVO.getTotal() - workOrderDataVO.getSheTotal() - workOrderDataVO.getWtsTotal() - workOrderDataVO.getGcsTotal());
|
}
|
workOrderDataVOList.add(workOrderDataVO);
|
}
|
}else if(Constants.equalsInteger(orderDataDTO.getQueryType(),Constants.ONE)){
|
//按照季度查询
|
for (int i = 1 ; i <= quarter; i++) {
|
List<Workorder> dataList = new ArrayList<>();
|
if(Constants.equalsInteger(i,Constants.ONE)){
|
dataList = workorderList.stream().filter(j->Integer.valueOf(DateUtil.formatDate(j.getCreateDate(),"MM"))<=3 )
|
.collect(Collectors.toList());
|
}else if(Constants.equalsInteger(i,Constants.TWO)){
|
dataList = workorderList.stream().filter(j->Integer.valueOf(DateUtil.formatDate(j.getCreateDate(),"MM"))<=6 && Integer.valueOf(DateUtil.formatDate(j.getCreateDate(),"MM"))>=4 )
|
.collect(Collectors.toList());
|
}else if(Constants.equalsInteger(i,Constants.THREE)){
|
dataList = workorderList.stream().filter(j->Integer.valueOf(DateUtil.formatDate(j.getCreateDate(),"MM"))<=9 && Integer.valueOf(DateUtil.formatDate(j.getCreateDate(),"MM"))>=7 )
|
.collect(Collectors.toList());
|
}else {
|
dataList = workorderList.stream().filter(j-> Integer.valueOf(DateUtil.formatDate(j.getCreateDate(),"MM"))>=10 )
|
.collect(Collectors.toList());
|
}
|
WorkOrderDataVO workOrderDataVO = new WorkOrderDataVO();
|
workOrderDataVO.setDateStr(i+"季度");
|
workOrderDataVO.setGcsTotal(Constants.ZERO);
|
workOrderDataVO.setWtsTotal(Constants.ZERO);
|
workOrderDataVO.setSheTotal(Constants.ZERO);
|
workOrderDataVO.setUnCloseTotal(Constants.ZERO);
|
workOrderDataVO.setTotal(Constants.ZERO);
|
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(dataList)){
|
workOrderDataVO.setTotal(dataList.size());
|
workOrderDataVO.setGcsTotal(dataList.stream().filter(j->Constants.equalsInteger(j.getStatus(),Constants.WorkOrderStatus.close.getKey())).collect(Collectors.toList()).size());
|
workOrderDataVO.setSheTotal(dataList.stream().filter(j->Constants.equalsInteger(j.getStatus(),Constants.WorkOrderStatus.sheClose.getKey())).collect(Collectors.toList()).size());
|
workOrderDataVO.setWtsTotal(dataList.stream().filter(j->Constants.equalsInteger(j.getStatus(),Constants.WorkOrderStatus.wtsClose.getKey())).collect(Collectors.toList()).size());
|
workOrderDataVO.setUnCloseTotal(workOrderDataVO.getTotal() - workOrderDataVO.getSheTotal() - workOrderDataVO.getWtsTotal() - workOrderDataVO.getGcsTotal());
|
}
|
workOrderDataVOList.add(workOrderDataVO);
|
|
}
|
}
|
return workOrderDataVOList;
|
}
|
|
|
|
|
|
}
|