Commit 33a43393 authored by suhuiguang's avatar suhuiguang

1.需求J071

parent bc6bb636
......@@ -208,4 +208,11 @@ public class JyjcInspectionResult extends BaseEntity {
*/
@TableField(value = "is_exist_nc")
private Boolean isExistNc;
/**
* 安全等级
*/
@TableField(value = "safety_level")
private String safetyLevel;
}
package com.yeejoin.amos.boot.module.jyjc.api.mapper;
import com.yeejoin.amos.boot.module.ymt.api.dto.TzBaseUnitLicenceDto;
import com.yeejoin.amos.boot.module.ymt.api.dto.TzsUserInfoDto;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Mapper 接口
......@@ -11,6 +17,7 @@ import java.util.Map;
* @author system_generator
* @date 2023-12-13
*/
@Mapper
public interface JyjcBaseMapper {
List<TzBaseUnitLicenceDto> selectBaseUnitLicenceList(Map<String, Object> params);
......@@ -21,4 +28,6 @@ public interface JyjcBaseMapper {
String selectBusinessData(String tableName, String instanceId,String key);
void updateBusinessData(String tableName, String assignee, String transferToUserIds, String instanceId, String nextTaskId,String key);
List<TzsUserInfoDto> selectParentOrgUsers(@Param("parentOrgCodeList") Set<String> parentOrgCodeList);
}
......@@ -171,4 +171,9 @@ public class JyjcInspectionResultModel extends BaseModel {
* 是否存在不符合项
*/
private Boolean isExistNc;
/**
* 安全等级
*/
private String safetyLevel;
}
package com.yeejoin.amos.boot.module.jyjc.api.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
import java.util.Set;
/**
* @author Administrator
*/
@Data
public class NeedTipEquipInfo {
/**
* 设备唯一标识
*/
private String record;
/**
* 单位信用代码
*/
private String useUnitCreditCode;
private String nextInspectDate;
/**
* 设备代码
*/
private String equCode;
/**
* 设备种类code
*/
private String equList;
/**
* 设备种类名称
*/
private String equListName;
/**
* 直接管辖机构
*/
private String orgBranchCode;
/**
* 上级管辖机构
*/
private Set<String> parentOrgBranchCode;
/**
* 设备提醒可看见的人
*/
private Set<String> receiveUsers;
/**
* 设备提醒可看见的人-字符串
*/
private String receiveUserStr;
/**
* 状态:1-超期;2-临期
*/
private String status;
@AllArgsConstructor
@Getter
private enum EquipStatusEnum {
/**
* 预警枚举
*/
cq("1", "临期预警", "【%s】【%s】设备检验有效期即将到期"),
lq("2", "超期预警", "【%s】【%s】设备检验有效期已超期");
/**
* code
*/
private String code;
private String title;
private String template;
public static EquipStatusEnum getContentByCode(String code) {
Optional<EquipStatusEnum> op = Arrays.stream(EquipStatusEnum.values()).filter(e -> e.code.equals(code)).findFirst();
return op.orElse(null);
}
}
public String getTitle() {
return EquipStatusEnum.getContentByCode(this.status).getTitle();
}
public String getContent() {
String template = EquipStatusEnum.getContentByCode(this.status).getTemplate();
return String.format(template, this.equListName, this.getEquCode());
}
}
......@@ -36,6 +36,22 @@
from ${tableName}
where ${key} = #{instanceId}
</select>
<select id="selectParentOrgUsers" resultType="com.yeejoin.amos.boot.module.ymt.api.dto.TzsUserInfoDto">
SELECT
group_concat(u.user_id) as amos_user_id,
c.org_code as org_code
FROM
"privilege_user_org_role" u,
privilege_company c
WHERE
u.company_seq = c.sequence_nbr
and
c.org_code in
<foreach collection="parentOrgCodeList" item="orgCode" open="(" close=")" separator=",">
#{orgCode}
</foreach>
GROUP BY c.org_code
</select>
</mapper>
......@@ -3,10 +3,9 @@ package com.yeejoin.amos.boot.module.jyjc.biz.controller;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.module.common.biz.utils.CommonResponseUtil;
import com.yeejoin.amos.boot.module.jyjc.biz.job.InspectionExpireRemindJob;
import com.yeejoin.amos.boot.module.jyjc.biz.service.TaskModelServiceImpl;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.CommonserviceImpl;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.EquipRegularlyRemindServicelmpl;
import com.yeejoin.amos.boot.module.ymt.api.dto.TzBaseEnterpriseInfoDto;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzBaseEnterpriseInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzsUserInfo;
......@@ -38,10 +37,12 @@ public class CommonController extends BaseController {
@Autowired
CommonserviceImpl commonserviceImpl;
@Autowired
TaskModelServiceImpl taskModelService;
@Autowired
EquipRegularlyRemindServicelmpl equipRegularlyRemindServicelmpl;
InspectionExpireRemindJob regularlyRemindJob;
private final static String SBZL_DICT_PRIFIX = "JYJC_SBZL";
......@@ -127,15 +128,6 @@ public class CommonController extends BaseController {
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/test1")
@ApiOperation(httpMethod = "GET", value = "查询检验检测机构基本信息", notes = "查询检验检测机构基本信息")
public ResponseModel sendReminderMessage() {
equipRegularlyRemindServicelmpl.sendReminderMessage();
return CommonResponseUtil.success();
}
/**
* 公共转办接口
* /common/transfer
......@@ -180,4 +172,12 @@ public class CommonController extends BaseController {
String dictCode = String.format("%s_%s", SBZL_DICT_PRIFIX, bizType);
return ResponseHelper.buildResponse(Systemctl.dictionarieClient.dictValues(dictCode).getResult());
}
@ApiOperation(httpMethod = "PUT", value = "检验消息提醒", notes = "检验消息提醒")
@PutMapping(value = "/test-tip")
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
public ResponseModel<String> testMsgTip(){
regularlyRemindJob.sendReminderMessage();
return ResponseHelper.buildResponse("succese");
}
}
package com.yeejoin.amos.boot.module.jyjc.biz.job;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcBaseMapper;
import com.yeejoin.amos.boot.module.jyjc.api.model.NeedTipEquipInfo;
import com.yeejoin.amos.boot.module.ymt.api.dto.TzsUserInfoDto;
import com.yeejoin.amos.boot.module.ymt.api.dto.UseInfoModel;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzsUserInfo;
import com.yeejoin.amos.boot.module.ymt.api.enums.EquimentEnum;
import com.yeejoin.amos.boot.module.ymt.api.mapper.TzsUserInfoMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.UseInfoMapper;
import com.yeejoin.amos.component.robot.AmosRequestContext;
import com.yeejoin.amos.feign.systemctl.Systemctl;
import com.yeejoin.amos.feign.systemctl.model.MessageModel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author Administrator
*/
@Service
@Slf4j
public class InspectionExpireRemindJob {
private static Map<String, String> EQU_LIST_MAP = new HashMap<>();
static {
EQU_LIST_MAP.put("9000", "客运索道");
EQU_LIST_MAP.put("7000", "压力管道元件");
EQU_LIST_MAP.put("6000", "大型游乐设施");
EQU_LIST_MAP.put("2000", "压力容器");
EQU_LIST_MAP.put("F000", "安全附件");
EQU_LIST_MAP.put("5000", "场(厂)内专用机动车辆");
EQU_LIST_MAP.put("1000", "锅炉");
EQU_LIST_MAP.put("8000", "压力管道");
EQU_LIST_MAP.put("3000", "电梯");
EQU_LIST_MAP.put("4000", "起重机械");
}
private UseInfoMapper useInfoMapper;
private TzsUserInfoMapper tzsUserInfoMapper;
private AmosRequestContext amosRequestContext;
private JyjcBaseMapper jyjcBaseMapper;
public InspectionExpireRemindJob(UseInfoMapper useInfoMapper,
TzsUserInfoMapper tzsUserInfoMapper,
AmosRequestContext amosRequestContext,
JyjcBaseMapper jyjcBaseMapper) {
this.useInfoMapper = useInfoMapper;
this.tzsUserInfoMapper = tzsUserInfoMapper;
this.amosRequestContext = amosRequestContext;
this.jyjcBaseMapper = jyjcBaseMapper;
}
public void sendReminderMessage() {
// 1.查询临期和超期的设备
List<NeedTipEquipInfo> needTipEquipList = getNeedTipEquipList();
// 2.填充接收人【查询设备的使用单位企业所有人(有amos账号)、设备的管辖机构(所、区县、地市、省)】
this.fillReceiveUsers(needTipEquipList);
// 3.按照设备维度创建提醒消息,批量调用平台
this.createTask(needTipEquipList);
}
private List<NeedTipEquipInfo> getNeedTipEquipList() {
// 查询需要进行消息提醒的设备集合
List<String> statusList = new ArrayList<>();
statusList.add(EquimentEnum.ZAIYONG.getCode().toString());
List<UseInfoModel> needTipEquipList = useInfoMapper.selecEquipInfotList(statusList, 30);
// 对象转换及管辖机构集合填充
return this.buildTipEquipInfoList(needTipEquipList);
}
private void fillReceiveUsers(List<NeedTipEquipInfo> needTipEquipList) {
// 使用单位
List<String> allUnitCodes = needTipEquipList.stream().map(NeedTipEquipInfo::getUseUnitCreditCode).distinct().collect(Collectors.toList());
// 查询使用单位下的人-数据库-批量查询
List<TzsUserInfo> useUnitUserList = this.getUseUnitUserList(allUnitCodes);
// 查询管辖单位下的人-数据库-批量查询
List<TzsUserInfoDto> superviseUnitUserList = this.getSuperviseUnitUserList(needTipEquipList);
// 以设备为维度,把 需要发送消息的人进行合并
needTipEquipList.forEach(e -> {
e.setReceiveUsers(useUnitUserList.stream().filter(u -> e.getUseUnitCreditCode().equals(u.getUnitCode())).map(TzsUserInfo::getAmosUserId).collect(Collectors.toSet()));
e.getReceiveUsers().addAll(superviseUnitUserList.stream().filter(u -> e.getParentOrgBranchCode().contains(u.getOrgCode())).map(TzsUserInfoDto::getAmosUserId).collect(Collectors.toSet()));
});
// 人员去重,字符串可能为:元素1:8551496,8551496,8551496,元素2:8551496,8551497,需要转为8551496、8551497
needTipEquipList.forEach(e -> {
Set<String> userIds = new HashSet<>();
e.getReceiveUsers().forEach(item -> {
userIds.addAll(Arrays.asList(item.split(",")));
});
e.setReceiveUsers(userIds);
});
}
private List<TzsUserInfoDto> getSuperviseUnitUserList(List<NeedTipEquipInfo> needTipEquipList) {
Set<String> allParentOrgCodes = new HashSet<>();
needTipEquipList.forEach(e -> allParentOrgCodes.addAll(e.getParentOrgBranchCode()));
return jyjcBaseMapper.selectParentOrgUsers(allParentOrgCodes);
}
private List<TzsUserInfo> getUseUnitUserList(List<String> allUnitCodes) {
LambdaQueryWrapper<TzsUserInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.select(TzsUserInfo::getAmosUserId, TzsUserInfo::getUnitCode);
queryWrapper.in(TzsUserInfo::getUnitCode, allUnitCodes);
queryWrapper.eq(BaseEntity::getIsDelete, false);
queryWrapper.isNotNull(TzsUserInfo::getAmosUserId);
return tzsUserInfoMapper.selectList(queryWrapper);
}
private List<NeedTipEquipInfo> buildTipEquipInfoList(List<UseInfoModel> needTipEquipList) {
return needTipEquipList.stream().map(c -> {
NeedTipEquipInfo tipEquipInfo = new NeedTipEquipInfo();
BeanUtil.copyProperties(c, tipEquipInfo);
Set<String> parentUnitCodes = new HashSet<>();
int index = tipEquipInfo.getOrgBranchCode().lastIndexOf("*");
if (index >= 0) {
parentUnitCodes.add(tipEquipInfo.getOrgBranchCode().substring(0, index));
setPatentCode(parentUnitCodes, tipEquipInfo.getOrgBranchCode().substring(0, index));
}
tipEquipInfo.setEquListName(EQU_LIST_MAP.get(tipEquipInfo.getEquList()));
tipEquipInfo.setParentOrgBranchCode(parentUnitCodes);
return tipEquipInfo;
}).collect(Collectors.toList());
}
private void setPatentCode(Set<String> parentUnitCodes, String current) {
int index = current.lastIndexOf("*");
if (index >= 0) {
parentUnitCodes.add(current.substring(0, index));
setPatentCode(parentUnitCodes, current.substring(0, index));
}
}
private void createTask(List<NeedTipEquipInfo> needTipEquipList) {
List<MessageModel> messageModels = new LinkedList<>();
needTipEquipList.parallelStream().forEach(e -> messageModels.add(this.buildTaskModel(e)));
messageModels.forEach(m -> {
RequestContext.setToken(amosRequestContext.getToken());
RequestContext.setProduct(amosRequestContext.getProduct());
RequestContext.setAppKey(amosRequestContext.getAppKey());
log.info("开始调用平台创建消息:{}", JSONObject.toJSONString(m));
Systemctl.messageClient.create(m);
});
}
private MessageModel buildTaskModel(NeedTipEquipInfo e) {
MessageModel messageModel = new MessageModel();
// 消息类型
messageModel.setTitle(e.getTitle());
// 消息内容
messageModel.setBody(e.getContent());
// 关联id
messageModel.setRelationId(e.getRecord());
messageModel.setMsgType(e.getStatus());
messageModel.setMsgTypeLabel(e.getTitle());
messageModel.setRecivers(new ArrayList<>(e.getReceiveUsers()));
messageModel.setAgencyCode("tzs");
messageModel.setSendTime(new Date());
messageModel.setTerminal("WEB");
return messageModel;
}
}
......@@ -4,7 +4,6 @@ import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
......@@ -13,28 +12,17 @@ import com.yeejoin.amos.boot.module.jyjc.api.enums.OpenBizTypeEnum;
import com.yeejoin.amos.boot.module.ymt.api.dto.TzBaseEnterpriseInfoDto;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzBaseEnterpriseInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzsUserInfo;
import com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum;
import com.yeejoin.amos.boot.module.ymt.api.mapper.TzBaseEnterpriseInfoMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.TzsUserInfoMapper;
import com.yeejoin.amos.feign.privilege.Privilege;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import com.yeejoin.amos.feign.systemctl.Systemctl;
import com.yeejoin.amos.feign.systemctl.model.TaskV2Model;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.net.URLEncoder;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
public class CommonserviceImpl {
......@@ -55,8 +43,6 @@ public class CommonserviceImpl {
RedisUtils redisUtils;
@Autowired
TzsUserInfoMapper userInfoMapper;
@Autowired
private WorkflowHelper workflowHelper;
@Autowired
TzBaseEnterpriseInfoMapper enterpriseInfoMapper;
......@@ -66,18 +52,16 @@ public class CommonserviceImpl {
* @return ReginParams
* @description 获取当前用户注册信息
*/
public ReginParams getReginParamsOfCurrentUser() {
ReginParams reginParams = JSONObject.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class);
return reginParams;
ReginParams getReginParamsOfCurrentUser() {
return JSONObject.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class);
}
public List<TzsUserInfo> getUserInfosByUnitCode(String unitCode) {
QueryWrapper userInfoQueryWrapper = new QueryWrapper<>();
userInfoQueryWrapper.eq("unit_code", unitCode);
userInfoQueryWrapper.like("post", jyjcUserPost);
userInfoQueryWrapper.eq("is_delete", false);
List<TzsUserInfo> userInfos = userInfoMapper.selectList(userInfoQueryWrapper);
return userInfos;
LambdaQueryWrapper<TzsUserInfo> userInfoQueryWrapper = new LambdaQueryWrapper<>();
userInfoQueryWrapper.eq(TzsUserInfo::getUnitCode, unitCode);
userInfoQueryWrapper.like(TzsUserInfo::getPost, jyjcUserPost);
userInfoQueryWrapper.eq(BaseEntity::getIsDelete, false);
return userInfoMapper.selectList(userInfoQueryWrapper);
}
public List<TzsUserInfo> getUserListByUnitCodeAndPost(String unitCode, String personType) {
......@@ -112,9 +96,7 @@ public class CommonserviceImpl {
List<String> ids = StrUtil.split(personCode, ",");
QueryWrapper userInfoQueryWrapper = new QueryWrapper<>();
userInfoQueryWrapper.in("sequence_nbr", ids);
List<TzsUserInfo> userInfos = userInfoMapper.selectList(userInfoQueryWrapper);
return userInfos;
return userInfoMapper.selectList(userInfoQueryWrapper);
}
......@@ -127,67 +109,6 @@ public class CommonserviceImpl {
}
public void buildTaskModel(Map<String, Object> params) {
TaskV2Model model = new TaskV2Model();
//获取待办任务执行人
Map<String, Object> nextNodeInfo = workflowHelper.getNextWorkflowNode(params.get("instanceId").toString());
String role = (String) nextNodeInfo.get("role");
model.setExecuteUserIds(role);
List<AgencyUserModel> userList = Privilege.agencyUserClient
.queryByRoleId(role, null, false).getResult();
List<String> userIds = userList.stream().map(AgencyUserModel::getUserId).collect(Collectors.toList());
model.setExecuteUserIds(CollectionUtils.isEmpty(userIds) ? "" : String.join(",", userIds));
model.setExtras(params.getOrDefault("extras", "").toString());
model.setRelationId(params.getOrDefault("instanceId", "").toString());
model.setRoutePath(params.getOrDefault("routePath", "").toString());
model.setStartDate((Date) params.getOrDefault("startDate", ""));
model.setStartUserId(params.getOrDefault("startUserId", "").toString());
model.setTaskContent(params.getOrDefault("taskContent", "").toString());
model.setTaskType(params.getOrDefault("taskType", "").toString());
model.setTaskTypeLabel(params.getOrDefault("taskTypeLabel", "").toString());
model.setTaskTitle(params.getOrDefault("taskTitle", "").toString());
model.setTaskName(params.getOrDefault("taskName", "").toString());
model.setTaskStatus(Integer.valueOf(params.getOrDefault("taskStatus", 0).toString()));
model.setTaskStatusLabel(params.getOrDefault("taskStatusLabel", "").toString());
model.setTaskSource(params.getOrDefault("taskSource", "workFlow").toString());
// model.setTerminal(params.getOrDefault("terminal","WEB").toString());
model.setCreateDate(new Date());
//model.setFinishStatus(false);
model.setTaskCode(params.get("taskCode").toString());
model.setRecUserId(params.get("userId").toString());
model.setAgencyCode(params.get("agencyCode").toString());
Systemctl.taskV2Client.create(model);
}
public TaskV2Model updateTaskModel(Map<String, Object> params) {
ReginParams reginParams = JSONObject.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class);
List<TaskV2Model> result = Systemctl.taskV2Client.selectListByRelationId(params.get("relationId").toString()).getResult();
TaskV2Model model = result.stream().sorted((r1, r2) -> r2.getCreateDate().compareTo(r1.getCreateDate())) // 按时间降序排序
.findFirst()
.orElse(null);
model.setTaskStatus(Integer.valueOf(params.get("taskStatus").toString()));
model.setTaskStatusLabel(params.get("taskStatusLabel").toString());
model.setEndUserId(reginParams.getUserModel().getUserId());
model.setEndDate(new Date());
model.setRoutePath(model.getRoutePath().replace("roleIds", "role").replace("edit", "look"));
//model.setFinishStatus(true);
Systemctl.taskV2Client.update(model, model.getSequenceNbr());
//修改model并返回 用于组装新待办
model.setEndUserId(null);
model.setTaskStatus(null);
model.setEndDate(null);
model.setSequenceNbr(null);
//model.setCreateUserId(reginParams.getUserModel().getUserId());
model.setCreateDate(new Date());
model.setTaskStatus(FlowStatusEnum.REJECTED.getCode());
model.setTaskStatusLabel(FlowStatusEnum.REJECTED.getName());
model.setStartDate(new Date());
return model;
}
@Async
public void sendMessage(HashMap<String, String> smsParams, List<String> phones) {
for (String phone : phones) {
......@@ -196,40 +117,4 @@ public class CommonserviceImpl {
}
}
public void deleteTaskModel(String id) {
List<TaskV2Model> result = Systemctl.taskV2Client.selectListByRelationId(id).getResult();
TaskV2Model model = result.stream().sorted((r1, r2) -> r2.getCreateDate().compareTo(r1.getCreateDate())) // 按时间降序排序
.findFirst()
.orElse(null);
Systemctl.taskV2Client.delete(String.valueOf(model.getSequenceNbr()));
}
public <T> String toQueryParams(T obj) throws UnsupportedEncodingException {
StringBuilder sb = new StringBuilder();
for (Class<?> clazz = obj.getClass(); !clazz.equals(Object.class); clazz = clazz.getSuperclass()) {
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
if (!Modifier.isStatic(field.getModifiers())) {
field.setAccessible(true);
try {
Object value = field.get(obj);
if (value != null && !"".equals(value)) {
String encodedValue = URLEncoder.encode(value.toString(), "UTF-8");
sb.append(field.getName()).append('=').append(encodedValue).append('&');
}
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
}
}
return sb.length() > 0 ? sb.substring(0, sb.length() - 1) : "";
}
}
package com.yeejoin.amos.boot.module.jyjc.biz.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.boot.biz.common.utils.DateUtils;
import com.yeejoin.amos.boot.module.jyjc.api.enums.BizTypeEnum;
import com.yeejoin.amos.boot.module.ymt.api.common.StringUtil;
import com.yeejoin.amos.boot.module.ymt.api.dto.UseInfoModel;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzsUserInfo;
import com.yeejoin.amos.boot.module.ymt.api.mapper.TzsUserInfoMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.UseInfoMapper;
import com.yeejoin.amos.feign.systemctl.Systemctl;
import com.yeejoin.amos.feign.systemctl.model.MessageModel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.util.*;
import java.util.stream.Collectors;
@EnableScheduling
@Service
@Slf4j
public class EquipRegularlyRemindServicelmpl {
@Autowired
private UseInfoMapper useInfoMapper;
@Autowired
private TzsUserInfoMapper tzsUserInfoMapper;
@Autowired
CommonserviceImpl commonservice;
@Scheduled(cron = "${equip-hint:0 0 8 * * ?}")
public void sendReminderMessage(){
//获取当前日期
String currentDate = DateUtils.getDateNowShortStr();
Date curDate = null;
try {
curDate = DateUtils.dateParse(currentDate, null);
} catch (ParseException e) {
e.printStackTrace();
}
Date date = DateUtils.dateAddDays(curDate, 31);
List<String> types = new ArrayList<>();
List<String> status = new ArrayList<>();
types.add("DTJC");
types.add("DQJY");
//查询需要发送消息的设备
// LambdaQueryWrapper<UseInfo> query = new LambdaQueryWrapper<>();
// query.in(UseInfo::getLastInspectType,types);
// query.in(UseInfo::getStatus,status);
// query.le(UseInfo::getNextInspectDate,date).or().ge(UseInfo::getNextInspectDate,currentDate);
// List<UseInfo> equips = useInfoMapper.selectList(query);
//
List<UseInfoModel> equips = useInfoMapper.selecEquipInfotList(types, status, date, curDate);
//超期设备
List<UseInfoModel> cqEquip = new ArrayList<>();
//临期设备
List<UseInfoModel> lqEquip = new ArrayList<>();
for (UseInfoModel equip : equips) {
//下次检验时间小于当前时间为超期 反之为临期
if (DateUtils.dateCompare(equip.getNextInspectDate(),curDate) < 0 ){
cqEquip.add(equip);
}else {
lqEquip.add(equip);
}
}
Map<String, List<UseInfoModel>> cqEquips = cqEquip.stream().collect(Collectors.groupingBy(UseInfoModel::getUseUnitCreditCode));
Map<String, List<UseInfoModel>> lqEquips = lqEquip.stream().collect(Collectors.groupingBy(UseInfoModel::getUseUnitCreditCode));
for (String s : cqEquips.keySet()) {
//查询单位下共有多少超期及临期装备
List<UseInfoModel> useInfos = cqEquips.get(s);
int cq = useInfos.size();
int lq = lqEquips.containsKey(s)?lqEquips.get(s).size():0;
//查询符合发送规则的人员电话
LambdaQueryWrapper<TzsUserInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(TzsUserInfo::getPost,"6552");
queryWrapper.isNotNull(TzsUserInfo::getPhone);
List<TzsUserInfo> tzsUserInfos = tzsUserInfoMapper.selectList(queryWrapper);
List<String> phones = tzsUserInfos.stream().filter(e-> StringUtil.isNotEmpty(e.getPhone())).map(TzsUserInfo::getPhone).collect(Collectors.toList());
List<String> userIds = tzsUserInfos.stream().filter(e-> StringUtil.isNotEmpty(e.getAmosUserId())).map(TzsUserInfo::getAmosUserId).collect(Collectors.toList());
// 组装短信内容 发送短信
HashMap<String,String> smsParams = new HashMap<>();
smsParams.put("smsCode","EQU_TZS_001");
smsParams.put("lq", String.valueOf(lq));
smsParams.put("cq", String.valueOf(cq));
commonservice.sendMessage(smsParams,phones);
//发送平台消息
if ( lqEquips.containsKey(s)){
useInfos.addAll(lqEquips.get(s));
}
for (UseInfoModel useInfo : useInfos) {
Date nextInspectDate = useInfo.getNextInspectDate();
try {
MessageModel messageModel = new MessageModel();
messageModel.setCategory(1); //1 :消息通知
messageModel.setRelationId(useInfo.getRecord());
int day = DateUtils.dateBetween(nextInspectDate, curDate);
int day1 = DateUtils.dateBetween(nextInspectDate, date);
if (day > 0) {
messageModel.setTitle("设备超期提醒");
messageModel.setBody(useInfo.getProductName()+"("+(useInfo.getSupervisoryCode()==null?"":useInfo.getSupervisoryCode()+") 已超期"+ Math.abs(day)+"天"));
}else if (day1 > 0){
messageModel.setTitle("设备临期提醒");
messageModel.setBody(useInfo.getProductName()+"("+(useInfo.getSupervisoryCode()==null?"":useInfo.getSupervisoryCode()+") 还有"+ Math.abs(day1)+"天将到期"));
}
messageModel.setRecivers(userIds);
messageModel.setIsSendWeb(true);
messageModel.setMsgType("EQUIP_HINT");
messageModel.setMsgTypeLabel("设备检验");
Systemctl.messageClient.create(messageModel);
log.info("信息发送完成");
} catch (ParseException e) {
e.printStackTrace();
}
}
}
}
}
......@@ -62,6 +62,12 @@ public class TzsUserInfoDto extends BaseDto {
@ApiModelProperty(value = "账户名")
private String amosUserName;
@ApiModelProperty(value = "单位编码")
private String unitCode;
@ApiModelProperty(value = "单位orgCode")
private String orgCode;
@ApiModelProperty(value = "单位名称")
private String unitName;
......
......@@ -82,4 +82,19 @@ public class UseInfoModel extends BaseDto {
private String lastInspectType;
private String record;
/**
* 设备代码
*/
private String equCode;
/**
* 设备种类
*/
private String equList;
/**
* 管辖机构
*/
private String orgBranchCode;
}
......@@ -6,6 +6,9 @@ import com.yeejoin.amos.boot.module.ymt.api.dto.TzsUserInfoDto;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzsUserInfo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Set;
public interface TzsUserInfoMapper extends BaseMapper<TzsUserInfo> {
Page<TzsUserInfoDto> selectPageMessage(@Param("page") Page<TzsUserInfoDto> page, @Param("dto") TzsUserInfoDto dto);
}
......@@ -3,6 +3,7 @@ package com.yeejoin.amos.boot.module.ymt.api.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.boot.module.ymt.api.dto.UseInfoModel;
import com.yeejoin.amos.boot.module.ymt.api.entity.UseInfo;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
......@@ -15,7 +16,7 @@ import java.util.List;
*/
public interface UseInfoMapper extends BaseMapper<UseInfo> {
List<UseInfoModel> selecEquipInfotList(List<String>types, List<String>statusList, Date date,Date curDate);
List<UseInfoModel> selecEquipInfotList(@Param("statusList") List<String> statusList, @Param("interval") int interval);
void updateByRecord(String record, Date nextInspectDate, String lastInspectType, String lastInspectReportNo);
}
......@@ -15,33 +15,28 @@
<select id="selecEquipInfotList" resultType="com.yeejoin.amos.boot.module.ymt.api.dto.UseInfoModel">
SELECT
use.RECORD,
use.USE_UNIT_CREDIT_CODE,
other.SUPERVISORY_CODE as supervisoryCode,
register.PRODUCT_NAME as productName,
use.NEXT_INSPECT_DATE as nextInspectDate,
base.contact_phone as phone
use.RECORD,
use.USE_UNIT_CREDIT_CODE,
register.EQU_CODE,
register.EQU_LIST,
use.NEXT_INSPECT_DATE as nextInspectDate,
supervision.ORG_BRANCH_CODE,
CASE (NEXT_INSPECT_DATE > CURRENT_DATE)
WHEN true THEN 1
ELSE 2
END as status
FROM
idx_biz_jg_use_info use
LEFT JOIN idx_biz_jg_other_info other on other.RECORD = use.RECORD
LEFT JOIN idx_biz_jg_register_info register on register.RECORD = use.RECORD
LEFT JOIN idx_biz_jg_register_info register on register.RECORD = use.RECORD
LEFT JOIN idx_biz_jg_supervision_info supervision on supervision.RECORD = use.RECORD
LEFT JOIN privilege_company pc on pc.org_code = supervision.ORG_BRANCH_CODE
LEFT JOIN tz_base_enterprise_info base on base.use_code = pc.company_code
<where>
<if test="statusList.size() > 0">
and STATUS in
and EQU_STATE in
<foreach collection="statusList" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
<if test="types.size() > 0">
and LAST_INSPECT_TYPE in
<foreach collection="types" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
and (#{date} >= NEXT_INSPECT_DATE or #{curDate} > NEXT_INSPECT_DATE)
and (NEXT_INSPECT_DATE - CURRENT_DATE <![CDATA[<=]]> #{interval} or NEXT_INSPECT_DATE > CURRENT_DATE)
</where>
</select>
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment