Merge branch 'dev_2nd_period_test' into 'feature_dev_20221010_extend'

# Conflicts:
#   jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/mapper/ParamsCollectManifestEOMapper.java
This commit is contained in:
高嵩
2022-10-28 16:34:39 +08:00
113 changed files with 9798 additions and 670 deletions
@@ -0,0 +1,41 @@
package com.jero.common.constant.enums;
public enum MessageType2Enum {
SUBSCRIPTION_NOTIFICATION("Subscription Notification","订阅通知"),
SHARE_FORWARD("Share Forward","转发推送"),
REGULATION_EARLY_WARNING("Regulation Early Warning","法规预警"),
REGULATION_LIST_CONFIRMATION("Regulation List Confirmation","法规清单确认"),
REGULATION_TASK_CONFIRMATION("Regulation Task Confirmation","法规任务确认"),
DESIGN_COMPLIANCE_CONFIRMATION("Design Compliance Confirmation","设计符合性确认"),
PRE_HOMO_CONFIRMATION("Pre-Homo Confirmation","Pre-Homo确认"),
VALIDATION_COMPLIANCE_CONFIRMATION("Validation Compliance Confirmation","验证符合性确认"),
REGULATION_OPINION_COLLECTION("Regulation Opinion Collection","法规意见收集"),
REGULATION_TECHNICAL_ASSESSMENT("Regulation Technical Assessment","法规技术评估"),
HOMO_PARAMETER_COLLECTION("Homo Parameter Collection","认证参数收集");
String en;
String cn;
MessageType2Enum(String en, String cn) {
this.en = en;
this.cn = cn;
}
public String getEn() {
return en;
}
public void setEn(String en) {
this.en = en;
}
public String getCn() {
return cn;
}
public void setCn(String cn) {
this.cn = cn;
}
}
@@ -6,11 +6,11 @@ package com.jero.common.constant.enums;
* @auth zhn
*/
public enum MessageTypeEnum {
READ("Subscription Notification","1"),
WARN("Early Warning","2"),
PUSH("Share / Forward","3"),
HOMO_TASK("Homo Parameter Task","4"),
TASK("Regulation Compliance Task", "5"),
READ("Subscription Notification","订阅通知","1"),
WARN("Regulation Early Warning","法规预警","2"),
PUSH("Share / Forward","转发推送","3"),
HOMO_TASK("Homo Parameter Task","","4"),
TASK("Regulation Compliance Task","", "5"),
//REGULATION_LIST_CONFIRMATION_TASK("Regulation List Confirmation Task", "6"), // 清单确认任务
//REGULATION_LIST_CONFIRMATION_NOTIFICATION("Regulation List Confirmation Notification", "7"), // 清单确认通知
//REGULATION_TASK_CONFIRMATION_TASK("Regulation Task Confirmation", "8"), // 任务确认任务
@@ -21,19 +21,21 @@ public enum MessageTypeEnum {
//DESIGN_COMPLIANCE_NOTIFICATION("Design Compliance Notification", "12"), // 设计符合性通知
//PRE_HOMO_NOTIFICATION("Pre-Homo Notification", "13"), // Pre-Homo通知
//VALIDATION_COMPLIANCE_NOTIFICATION("Validation Compliance Notification", "14"), // 验证符合性通知
SYSTEMATIC_NOTIFICATION("Systematic Notification", "15"), // 系统通知
LIST_CONFIRMATION("List Confirmation", "17"), // 清单确认
TASK_CONFIRMATION("Task Confirmation", "18"), // 任务确认
COMPLIANCE_CONFIRMATION("Compliance Confirmation", "19"), // 符合性确认
COLLECTION_OF_LEGISLATIVE_COMMENTS("Collection of Legislative Comments", "20"), // 法规意见收集
REGULATORY_AND_TECHNICAL_ASSESSMENT("Regulatory and technical assessment", "21"), // 法规技术评估
SYSTEMATIC_NOTIFICATION("Systematic Notification","", "15"), // 系统通知
LIST_CONFIRMATION("List Confirmation", "","17"), // 清单确认
TASK_CONFIRMATION("Task Confirmation", "","18"), // 任务确认
COMPLIANCE_CONFIRMATION("Compliance Confirmation","", "19"), // 符合性确认
COLLECTION_OF_LEGISLATIVE_COMMENTS("Collection of Legislative Comments","", "20"), // 法规意见收集
REGULATORY_AND_TECHNICAL_ASSESSMENT("Regulatory and technical assessment", "","21"), // 法规技术评估
;
String name;
String nameCn;
String value;
private MessageTypeEnum(String name, String value) {
private MessageTypeEnum(String name,String nameCn, String value) {
this.name = name;
this.nameCn = nameCn;
this.value = value;
}
@@ -52,4 +54,12 @@ public enum MessageTypeEnum {
public void setValue(String value) {
this.value = value;
}
public String getNameCn() {
return nameCn;
}
public void setNameCn(String nameCn) {
this.nameCn = nameCn;
}
}
@@ -0,0 +1,32 @@
package com.jero.common.constant.enums;
public enum MsgColorEnum {
GREEN("其他","green"),
RED("任务被拒绝","red"),
YELLOW("任务预期","yellow");
String label;
String value;
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
MsgColorEnum(String label, String value) {
this.label = label;
this.value = value;
}
}
@@ -152,6 +152,10 @@ public class ShiroConfig {
filterChainDefinitionMap.put("/lawsTechnologyEvaluation/lawsTechnologyEvaluationEO/processCall", "anon");
// 法规技术评估-条款信息评估结果表 工作流处理数据接口排除
filterChainDefinitionMap.put("/lawsTechnologyEvaluation/lawsTechnologyEvaluationItemResultEO/processCall", "anon");
// 流程信息表 工作流处理数据接口排除
filterChainDefinitionMap.put("/todoCenter/processInfoEO/processCall", "anon");
// 流程信息明细表 工作流处理数据接口排除
filterChainDefinitionMap.put("/todoCenter/processInfoDetailEO/processCall", "anon");
filterChainDefinitionMap.put("/lark/larkEventSubscriptionConfig", "anon"); //飞书调用接口,事件订阅配置。
filterChainDefinitionMap.put("/lark/larkCardMessageConfig", "anon"); //飞书调用接口,卡片消息配置。
@@ -5,13 +5,14 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jero.common.constant.enums.CutEnum;
import com.jero.modules.system.enums.SysPermissionEnum;
import com.jero.modules.system.mapper.TodoCenterMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.authz.annotation.RequiresRoles;
import com.jero.common.api.vo.Result;
import com.jero.common.constant.CommonConstant;
import com.jero.common.system.util.JwtUtil;
import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.MD5Util;
import com.jero.common.util.oConvertUtils;
@@ -54,6 +55,9 @@ public class SysPermissionController {
@Autowired
private ISysDepartPermissionService sysDepartPermissionService;
@Autowired
private TodoCenterMapper todoCenterMapper;
/**
* 加载数据节点
*
@@ -641,6 +645,47 @@ public class SysPermissionController {
if (isWWWHttpUrl(permission.getUrl())) {
meta.put("url", permission.getUrl());
}
LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
Map<String,Object> params = new HashMap<>();
params.put("currentUserId",currentUser.getId());
List<String> flowTypeList = new ArrayList<>();
//项目法规任务
if(StringUtils.equals(permission.getId(), SysPermissionEnum.PROJECT_REGULATION_TASKS.getId())){
flowTypeList.add("1");
flowTypeList.add("2");
flowTypeList.add("3");
flowTypeList.add("4");
flowTypeList.add("10");
params.put("flowTypeList",flowTypeList);
//存在待办任务标识,true为有
boolean existTaskFlag = false;
int result = todoCenterMapper.todoCenterTaskCount(params);
if(result > 0){
existTaskFlag = true;
}
//查询当前登录用户是否有项目法规任务
meta.put("existTask",existTaskFlag);
}
//法规评估任务
if(StringUtils.equals(permission.getId(), SysPermissionEnum.REGULATORY_ASSESSMENT_TASKS.getId())){
flowTypeList.add("5");
flowTypeList.add("6");
params.put("flowTypeList",flowTypeList);
int result = todoCenterMapper.todoCenterTaskCount(params);
boolean existTaskFlag = false;
if(result > 0){
existTaskFlag = true;
}
meta.put("existTask",existTaskFlag);
}
//项目参数任务
if(StringUtils.equals(permission.getId(), SysPermissionEnum.PROJECT_PARAMETER_TASKS.getId())){
boolean existTaskFlag = false;
meta.put("existTask",existTaskFlag);
}
json.put("meta", meta);
}
@@ -0,0 +1,35 @@
package com.jero.modules.system.enums;
/**
* 菜单权限枚举类
* @Author: wzj
* @Date: 2022/10/26 16:14
**/
public enum SysPermissionEnum {
PROJECT_REGULATION_TASKS("项目法规任务","1580735287309119489",""),
REGULATORY_ASSESSMENT_TASKS("法规评估任务","1580735611793059842",""),
PROJECT_PARAMETER_TASKS("项目参数任务","1580735965892980738","");
private String name;
private String id;
private String value;
private SysPermissionEnum(String name,String id, String value) {
this.name = name;
this.id = id;
this.value = value;
}
public String getName() {
return name;
}
public String getValue() {
return value;
}
public String getId() {
return id;
}
}
@@ -0,0 +1,14 @@
package com.jero.modules.system.mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Map;
/**
* 待办中心mapper层
* @Author: wzj
* @Date: 2022/10/26 16:41
**/
public interface TodoCenterMapper {
int todoCenterTaskCount(@Param("params") Map<String, Object> params);
}
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jero.modules.system.mapper.TodoCenterMapper">
<select id="todoCenterTaskCount" resultType="java.lang.Integer">
select
count(1)
from
process_info pi
where
pi.id in (
select detail.process_info_id from process_info_detail detail where detail.status = 'NotDone' and detail.user_id = #{params.currentUserId}
)
<if test="params.flowTypeList != null ">
and pi.flow_type in
<foreach collection="params.flowTypeList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</select>
</mapper>
@@ -17,11 +17,13 @@ import java.util.Map;
public interface ParamsCollectManifestEOMapper extends BaseMapper<ParamsCollectManifestEO> {
List<ParamsCollectManifestEO> listInfo(@Param("paramsCollectManifestEO") ParamsCollectManifestEO paramsCollectManifestEO);
List<Map<String, Object>> listInfoForExport(@Param("paramsCollectManifestEO") ParamsCollectManifestEO paramsCollectManifestEO, @Param("ids") String ids);
List<ParamsCollectManifestEO> listInfoOfTodoCenter();
// 查询控件类型为 标题的 参数项
List<ParamsCollectManifestEO> listInfoOfTitle(@Param("paramsManifestId") String paramsManifestId);
IPage pageInfo(@Param("page") IPage page, @Param("paramsCollectManifestEO") ParamsCollectManifestEO paramsCollectManifestEO);
}
List<ParamsCollectManifestEO> queryByParamManifestId(@Param("paramsManifestId") String paramsManifestIdString);
}
@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jero.modules.cert.collect.entity.ParamsManifestEO;
import com.jero.modules.cert.collect.vo.ParamsManifestVO;
import com.jero.modules.todoCenter.entity.ParamsManifestTodoCenterEO;
import com.jero.modules.todoCenter.vo.ParamsManifestTodoCenterEOPage;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -24,6 +26,8 @@ public interface ParamsManifestEOMapper extends BaseMapper<ParamsManifestEO> {
List<ParamsManifestVO> listInfoAll(@Param("idList") List<String> idList);
List<ParamsManifestTodoCenterEO> listForTodoCenter(ParamsManifestTodoCenterEOPage paramsManifestTodoCenterEOPage);
ParamsManifestVO getProjectById(@Param("projectId") String projectId);
List<Map<String, String>> labelListForProjectDetails(@Param("projectId") String projectId);
@@ -84,6 +84,10 @@
order by del_flag desc, add_flag desc, change_flag desc, nio_number asc
</select>
<select id="listInfoOfTodoCenter" resultMap="ParamsCollectManifestEOResultMap">
select id,nio_number,state,sdt,dre,params_manifest_id from params_collect_manifest
</select>
<select id="listInfoForExport" resultType="java.util.LinkedHashMap">
select *
from params_collect_manifest
@@ -113,4 +117,8 @@
order by del_flag desc, add_flag desc, change_flag desc, nio_number asc
</select>
</mapper>
<select id="queryByParamManifestId" resultMap="ParamsCollectManifestEOResultMap">
select * from params_collect_manifest where params_manifest_id = #{paramsManifestId}
</select>
</mapper>
@@ -120,11 +120,34 @@
</select>
<select id="listForTodoCenter" resultType="com.jero.modules.todoCenter.entity.ParamsManifestTodoCenterEO" parameterType="com.jero.modules.todoCenter.vo.ParamsManifestTodoCenterEOPage">
select tmp_tb.* from(
select
pm.id as id,
pm.title as title,
pm.state as state,
pm.project_id as project_id,
pm.create_time as create_time,
concat(pni.project_name,'-',pyni.year_name,'-',plb.target_market,'-',pm.version) as project_name
from params_manifest pm
left join project_library_base as plb on plb.id = pm.project_id
left join project_name_info as pni on plb.project_name_id = pni.id
left join project_year_name_info as pyni on plb.year_name_id=pyni.id
) tmp_tb
where 1=1 and state = #{state}
<if test="projectName !=null and projectName !=''">
AND project_name LIKE CONCAT(CONCAT('%',#{projectName}),'%')
</if>
<if test="title !=null and title !=''">
AND title LIKE CONCAT(CONCAT('%',#{title}),'%')
</if>
</select>
<select id="getProjectById" resultMap="ParamsManifestEOResultMapForCopy">
select tmp_tb.* from(
select
plb.id as project_id,
concat(pni.project_name,'-',pyni.year_name,' ',target_market) as project_name
concat(pni.project_name,'-',pyni.year_name,'-',target_market,'-',project_version) as project_name
from project_library_base plb
left join project_name_info as pni on plb.project_name_id = pni.id
left join project_year_name_info as pyni on plb.year_name_id = pyni.id
@@ -178,4 +178,8 @@ public interface IParamsCollectManifestEOService extends IService<ParamsCollectM
// 调整责任领域
List<String> updateBatchDutyTerritory(ParamsCollectManifestVO paramsCollectManifestVO);
//监控参数收集任务的截止时间,并根据时间段发送飞书
void checkDeadline();
}
@@ -40,6 +40,7 @@ import com.jero.modules.cert.template.enums.ParamsIsMustEnum;
import com.jero.modules.cert.template.service.ICertCategoryParamsInfoPublishEOService;
import com.jero.modules.cert.template.service.IParamsInfoPublishEOService;
import com.jero.modules.feishu.service.IFeishuService;
import com.jero.modules.feishu.vo.FeishuMsg2Vo;
import com.jero.modules.feishu.vo.FeishuMsgVo;
import com.jero.modules.message.websocket.WebSocket;
import com.jero.modules.ocr.service.WebSocketServer;
@@ -1289,13 +1290,103 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
|| CollectManifestStateEnum.CERT_BACK.getValue().equals(paramsCollectManifestEO.getState())) {
updateEO.setState(String.valueOf(Integer.parseInt(paramsCollectManifestEO.getState()) - 2)); // 设置对应状态
} else {
updateEO.setState(String.valueOf(Integer.parseInt(paramsCollectManifestEO.getState()) + 1)); // 设置对应状态
}
updateEOList.add(updateEO);
}
return updateBatchById(updateEOList);
boolean update = updateBatchById(updateEOList);
if (update) {
LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); // 获取当前登录人
//飞书
for (ParamsCollectManifestEO paramsCollectManifestEO : updateEOList) {
paramsCollectManifestEO = getById(paramsCollectManifestEO.getId());
ParamsManifestEO paramsManifestEO = paramsManifestEOService.queryById(paramsCollectManifestEO.getParamsManifestId());
//日期
String deadline = new SimpleDateFormat("yyyy-MM-dd").format(paramsCollectManifestEO.getDeadline());
//项目名称
ParamsManifestVO projectInfo = paramsManifestEOService.getProjectById(paramsManifestEO.getProjectId()); // 获取项目信息
//url
String urlParamsStr = parseUrlParams(paramsManifestEO);
String hrefFeishu = backUrl + "/ParameterItemCollection" + urlParamsStr;
//认证工程师
String[] engThirdIds = new String[1];
List<ProjectLibraryBase> projectLibraryBases = projectLibraryBaseMapper.queryById(paramsManifestEO.getProjectId());
if (ObjectUtils.isNotEmpty(projectLibraryBases)) {
SysUser engineer = sysUserService.getById(projectLibraryBases.get(0).getCertificationEngineer());
if (ObjectUtils.isNotEmpty(engineer)) {
engThirdIds[0] = engineer.getThirdId();
}
}
if (CollectManifestStateEnum.SDT_BACK.getValue().equals(paramsCollectManifestEO.getState())) {
//通知认证工程师
try {
FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo();
feishuMsgVo.setTitle(MessageType2Enum.HOMO_PARAMETER_COLLECTION.getCn() + "/" + MessageType2Enum.HOMO_PARAMETER_COLLECTION.getEn());
feishuMsgVo.setCnContentUpper("您好,"+ currentUser.getUsername() +"退回了参数NIO-"+ paramsCollectManifestEO.getNioNumber() +",请及时处理");
feishuMsgVo.setCnContentLower("项目: " + projectInfo.getProjectName() +
"\n发起人: " + currentUser.getUsername() +
"\n截止时间: " + deadline);
feishuMsgVo.setEnContentUpper("Hello! "+ currentUser.getUsername() +" has returned the Parameter NIO-"+ paramsCollectManifestEO.getNioNumber() +". Please address it in a timely manner");
feishuMsgVo.setEnContentLower("Project: " + projectInfo.getProjectName() +
"\nInitiator: " + currentUser.getUsername() +
"\nDue Date: " + deadline);
feishuMsgVo.setUrl(hrefFeishu);
feishuMsgVo.setColor(MsgColorEnum.RED.getValue()); // 颜色
feishuService.sendCard(engThirdIds, feishuMsgVo);
} catch (IOException e) {
log.error("飞书消息推送失败");
}
} else if (CollectManifestStateEnum.DRE_BACK.getValue().equals(paramsCollectManifestEO.getState())) {
//通知认证工程师
try {
FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo();
feishuMsgVo.setTitle(MessageType2Enum.HOMO_PARAMETER_COLLECTION.getCn() + "/" + MessageType2Enum.HOMO_PARAMETER_COLLECTION.getEn());
feishuMsgVo.setCnContentUpper("您好,"+ currentUser.getUsername() +"申请撤回参数NIO-"+ paramsCollectManifestEO.getNioNumber() +",请及时处理");
feishuMsgVo.setCnContentLower("项目: " + projectInfo.getProjectName() +
"\n发起人: " + currentUser.getUsername() +
"\n截止时间: " + deadline);
feishuMsgVo.setEnContentUpper("Hello! "+ currentUser.getUsername() +" requested for withdrawing Parameter NIO-"+ paramsCollectManifestEO.getNioNumber() +". Please address it in a timely manner");
feishuMsgVo.setEnContentLower("Project: " + projectInfo.getProjectName() +
"\nInitiator: " + currentUser.getUsername() +
"\nDue Date: " + deadline);
feishuMsgVo.setUrl(hrefFeishu);
feishuMsgVo.setColor(MsgColorEnum.RED.getValue()); // 颜色
feishuService.sendCard(engThirdIds, feishuMsgVo);
} catch (IOException e) {
log.error("飞书消息推送失败");
}
//通知工程接口人
SysUser sdtUser = sysUserService.getUserByName(paramsCollectManifestEO.getSdt());
String[] SdtThirdIds = new String[1];
if (ObjectUtils.isNotEmpty(sdtUser)) {
SdtThirdIds[0] = sdtUser.getThirdId();
}
try {
FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo();
feishuMsgVo.setTitle(MessageType2Enum.HOMO_PARAMETER_COLLECTION.getCn() + "/" + MessageType2Enum.HOMO_PARAMETER_COLLECTION.getEn());
feishuMsgVo.setCnContentUpper("您好,"+ currentUser.getUsername() +"退回了参数NIO-"+ paramsManifestEO.getTitle() +",请及时处理");
feishuMsgVo.setCnContentLower("项目: " + projectInfo.getProjectName() +
"\n发起人: " + currentUser.getUsername() +
"\n截止时间: " + deadline);
feishuMsgVo.setEnContentUpper("Hello! "+ currentUser.getUsername() +" has returned the Parameter NIO-"+ paramsManifestEO.getTitle() +". Please address it in a timely manner");
feishuMsgVo.setEnContentLower("Project: " + projectInfo.getProjectName() +
"\nInitiator: " + currentUser.getUsername() +
"\nDue Date: " + deadline);
feishuMsgVo.setUrl(hrefFeishu);
feishuMsgVo.setColor(MsgColorEnum.RED.getValue()); // 颜色
feishuService.sendCard(engThirdIds, feishuMsgVo);
} catch (IOException e) {
log.error("飞书消息推送失败");
}
}
}
}
return update;
}
@Override
@@ -1448,13 +1539,13 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
thirdIds[0] = sysUser.getThirdId();
String urlParamsStr = parseUrlParams(paramsManifestEO);
String hrefFeishu = backUrl + "/ParameterItemCollection" + urlParamsStr;
String href = "<a href='/ParameterItemCollection" + urlParamsStr + "'" + " target='_blank'>the link</a>,";
String content = connectBuilder.substring(0, connectBuilder.toString().length()-1) + " and other parameter items, please enter the link to handle it.";
String contentInfo = connectBuilder.substring(0, connectBuilder.toString().length()-1) + " and other parameter items, please enter " + href + " and fill in the relevant information.";
String msgTitle = projectInfo.getProjectName() + ": You have a homo parameter task to complete";
//String href = "<a href='/ParameterItemCollection" + urlParamsStr + "'" + " target='_blank'>the link</a>,";
//String content = connectBuilder.substring(0, connectBuilder.toString().length()-1) + " and other parameter items, please enter the link to handle it.";
//String contentInfo = connectBuilder.substring(0, connectBuilder.toString().length()-1) + " and other parameter items, please enter " + href + " and fill in the relevant information.";
//String msgTitle = projectInfo.getProjectName() + ": You have a homo parameter task to complete";
// 发送系统消息
SysAnnouncement sysAnnouncement = new SysAnnouncement();
/*SysAnnouncement sysAnnouncement = new SysAnnouncement();
sysAnnouncement.setDelFlag("0");
sysAnnouncement.setSendStatus("0");
sysAnnouncement.setSendTime(new Date());
@@ -1471,10 +1562,10 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC);
obj.put(WebsocketConst.MSG_ID, paramsManifestId);
obj.put(WebsocketConst.MSG_TXT, contentInfo);
webSocket.sendMessage(obj.toJSONString());
webSocket.sendMessage(obj.toJSONString());*/
// 发送飞书消息
try {
/*try {
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
feishuMsgVo.setTitle(MessageTypeEnum.HOMO_TASK.getName());
feishuMsgVo.setContent(content);
@@ -1486,6 +1577,23 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
feishuService.sendCardMsg(thirdIds, feishuMsgVo);
} catch (IOException e) {
log.error("飞书消息推送失败");
}*/
try {
FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo();
feishuMsgVo.setTitle(MessageType2Enum.HOMO_PARAMETER_COLLECTION.getCn() + "/" + MessageType2Enum.HOMO_PARAMETER_COLLECTION.getEn());
feishuMsgVo.setCnContentUpper("您好,"+ currentUser.getUsername() +"向您分发了认证参数填写任务,请及时处理。");
feishuMsgVo.setCnContentLower("项目: " + projectInfo.getProjectName() +
"\n发起人: " + currentUser.getUsername() +
"\n截止时间: " + sdf.format(deadline));
feishuMsgVo.setEnContentUpper("Hello! "+ currentUser.getUsername() +" has assigned the task of filling in Homo Parameter to you. Please address it in a timely manner.");
feishuMsgVo.setEnContentLower("Project: " + projectInfo.getProjectName() +
"\nInitiator: " + currentUser.getUsername() +
"\nDue Date: " + sdf.format(deadline));
feishuMsgVo.setUrl(hrefFeishu);
feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色
feishuService.sendCard(thirdIds, feishuMsgVo);
} catch (IOException e) {
log.error("飞书消息推送失败");
}
return isSuccess;
@@ -1519,7 +1627,7 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
List<ParamsCollectManifestEO> paramsCollectManifestEOList = listByIds(Arrays.asList(paramsCollectManifestIdStr));
paramsCollectManifestEOList = paramsCollectManifestEOList.stream().sorted(Comparator.comparing(ParamsCollectManifestBaseEO::getNioNumber)).collect(Collectors.toList()); // 按NIO编号升序
for (ParamsCollectManifestEO paramsCollectManifestEO : paramsCollectManifestEOList) {
for (ParamsCollectManifestEO paramsCollectManifestEO : paramsCollectManifestEOList) {
// 判断参数项状态
if (CollectManifestStateEnum.WAIT_COLLECT.getValue().equals(paramsCollectManifestEO.getState())
|| CollectManifestStateEnum.SDT_BACK.getValue().equals(paramsCollectManifestEO.getState())
@@ -1550,19 +1658,19 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
}
boolean isSuccess = updateBatchById(updateEOList);
if (isSuccess) {
// 消息内容
List<ParamsCollectManifestEO> afterUpdateEOList = listByIds(updateEOIdList);
List<String> sdtList = afterUpdateEOList.stream()
.map(ParamsCollectManifestEO::getSdt)
.distinct()
.collect(Collectors.toList());
if (CollectionUtil.isEmpty(sdtList)) {
throw new JeroBootException("没有可下发的工程接口人!");
}
for (String sdt : sdtList) {
if (isSuccess) {
// 消息内容
List<ParamsCollectManifestEO> afterUpdateEOList = listByIds(updateEOIdList);
List<String> sdtList = afterUpdateEOList.stream()
.map(ParamsCollectManifestEO::getSdt)
.distinct()
.collect(Collectors.toList());
if (CollectionUtil.isEmpty(sdtList)) {
throw new JeroBootException("没有可下发的工程接口人!");
}
for (String sdt : sdtList) {
StringBuilder connectBuilder = new StringBuilder();
/* StringBuilder connectBuilder = new StringBuilder();
connectBuilder.append("You are required to fill in ");
for (int i = 0; i < afterUpdateEOList.size(); i++) {
ParamsCollectManifestEO paramsCollectManifestEO = afterUpdateEOList.get(i);
@@ -1570,19 +1678,19 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
connectBuilder.append(paramsCollectManifestEO.getNioNumber()).append("-").append(paramsCollectManifestEO.getParamsName()).append(",");
}
}
String content = connectBuilder.substring(0, connectBuilder.toString().length() - 1) + " and other parameter items, please enter the link to handle it.";
String content = connectBuilder.substring(0, connectBuilder.toString().length() - 1) + " and other parameter items, please enter the link to handle it.";*/
SysUser sysUser = sysUserService.getUserByName(sdt);
String[] thirdIds = new String[1];
thirdIds[0] = sysUser.getThirdId();
String urlParamsStr = parseUrlParams(paramsManifestEO);
String hrefFeishu = backUrl + "/ParameterItemCollection" + urlParamsStr;
String href = "<a href='/ParameterItemCollection" + urlParamsStr + "'" + " target='_blank'>the link</a>,";
String contentInfo = connectBuilder.substring(0, connectBuilder.toString().length() - 1) + " and other parameter items, please enter " + href + " and fill in the relevant information.";
String msgTitle = projectInfo.getProjectName() + ": You have a homo parameter task to complete";
SysUser sysUser = sysUserService.getUserByName(sdt);
String[] thirdIds = new String[1];
thirdIds[0] = sysUser.getThirdId();
String urlParamsStr = parseUrlParams(paramsManifestEO);
String hrefFeishu = backUrl + "/ParameterItemCollection" + urlParamsStr;
//String href = "<a href='/ParameterItemCollection" + urlParamsStr + "'" + " target='_blank'>the link</a>,";
//String contentInfo = connectBuilder.substring(0, connectBuilder.toString().length() - 1) + " and other parameter items, please enter " + href + " and fill in the relevant information.";
//String msgTitle = projectInfo.getProjectName() + ": You have a homo parameter task to complete";
// 发送系统消息
SysAnnouncement sysAnnouncement = new SysAnnouncement();
// 发送系统消息
/* SysAnnouncement sysAnnouncement = new SysAnnouncement();
sysAnnouncement.setDelFlag("0");
sysAnnouncement.setSendStatus("0");
sysAnnouncement.setSendTime(new Date());
@@ -1599,24 +1707,28 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC);
obj.put(WebsocketConst.MSG_ID, paramsManifestId);
obj.put(WebsocketConst.MSG_TXT, contentInfo);
webSocket.sendMessage(obj.toJSONString());
webSocket.sendMessage(obj.toJSONString());*/
// 发送飞书消息
try {
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
feishuMsgVo.setTitle(MessageTypeEnum.HOMO_TASK.getName());
feishuMsgVo.setContent(content);
feishuMsgVo.setUrl(hrefFeishu);
feishuMsgVo.setTaskType(MessageTypeEnum.HOMO_TASK.getName());
feishuMsgVo.setProject(projectInfo.getProjectName()); // 车型-年款 区域
feishuMsgVo.setInitiator(currentUser.getUsername());
feishuMsgVo.setDueDate(sdf.format(deadline)); // 最早时间
feishuService.sendCardMsg(thirdIds, feishuMsgVo);
} catch (IOException e) {
log.error("飞书消息推送失败");
}
}
}
// 发送飞书消息
try {
FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo();
feishuMsgVo.setTitle(MessageType2Enum.HOMO_PARAMETER_COLLECTION.getCn() + "/" + MessageType2Enum.HOMO_PARAMETER_COLLECTION.getEn());
feishuMsgVo.setCnContentUpper("您好,请及时分配参数填写人");
feishuMsgVo.setCnContentLower("项目: " + projectInfo.getProjectName() +
"\n发起人: " + currentUser.getUsername() +
"\n截止时间: " + sdf.format(deadline));
feishuMsgVo.setEnContentUpper("Hello! Please assign the task of filling in Homo Parameter in a timely manner");
feishuMsgVo.setEnContentLower("Project: " + projectInfo.getProjectName() +
"\nInitiator: " + currentUser.getUsername() +
"\nDue Date: " + sdf.format(deadline));
feishuMsgVo.setUrl(hrefFeishu);
feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色
feishuService.sendCard(thirdIds, feishuMsgVo);
} catch (IOException e) {
log.error("飞书消息推送失败");
}
}
}
return getMsgOfIssueCollection(msgMapList, cut, "1");
}
@@ -1692,7 +1804,7 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
}
for (String sdt : sdtList) {
StringBuilder connectBuilder = new StringBuilder();
/*StringBuilder connectBuilder = new StringBuilder();
connectBuilder.append("You are required to fill in ");
for (int i = 0; i < afterUpdateEOList.size(); i++) {
ParamsCollectManifestEO paramsCollectManifestEO = afterUpdateEOList.get(i);
@@ -1700,8 +1812,7 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
connectBuilder.append(paramsCollectManifestEO.getNioNumber()).append("-").append(paramsCollectManifestEO.getParamsName()).append(",");
}
}
String content = connectBuilder.substring(0, connectBuilder.toString().length() - 1) + " and other parameter items, please enter the link to handle it.";
String content = connectBuilder.substring(0, connectBuilder.toString().length() - 1) + " and other parameter items, please enter the link to handle it.";*/
SysUser sysUser = sysUserService.getUserByName(sdt);
if(sysUser == null){
continue;
@@ -1711,12 +1822,12 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
thirdIds[0] = sysUser.getThirdId();
String urlParamsStr = parseUrlParams(paramsManifestEO);
String hrefFeishu = backUrl + "/ParameterItemCollection" + urlParamsStr;
String href = "<a href='/ParameterItemCollection" + urlParamsStr + "'" + " target='_blank'>the link</a>,";
String contentInfo = connectBuilder.substring(0, connectBuilder.toString().length() - 1) + " and other parameter items, please enter " + href + " and fill in the relevant information.";
String msgTitle = projectInfo.getProjectName() + ": You have a homo parameter task to complete";
//String href = "<a href='/ParameterItemCollection" + urlParamsStr + "'" + " target='_blank'>the link</a>,";
//String contentInfo = connectBuilder.substring(0, connectBuilder.toString().length() - 1) + " and other parameter items, please enter " + href + " and fill in the relevant information.";
//String msgTitle = projectInfo.getProjectName() + ": You have a homo parameter task to complete";
// 发送系统消息
SysAnnouncement sysAnnouncement = new SysAnnouncement();
/*SysAnnouncement sysAnnouncement = new SysAnnouncement();
sysAnnouncement.setDelFlag("0");
sysAnnouncement.setSendStatus("0");
sysAnnouncement.setSendTime(new Date());
@@ -1733,19 +1844,23 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC);
obj.put(WebsocketConst.MSG_ID, paramsManifestId);
obj.put(WebsocketConst.MSG_TXT, contentInfo);
webSocket.sendMessage(obj.toJSONString());
webSocket.sendMessage(obj.toJSONString());*/
// 发送飞书消息
try {
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
feishuMsgVo.setTitle(MessageTypeEnum.HOMO_TASK.getName());
feishuMsgVo.setContent(content);
FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo();
feishuMsgVo.setTitle(MessageType2Enum.HOMO_PARAMETER_COLLECTION.getCn() + "/" + MessageType2Enum.HOMO_PARAMETER_COLLECTION.getEn());
feishuMsgVo.setCnContentUpper("您好,请及时分配参数填写人");
feishuMsgVo.setCnContentLower("项目: " + projectInfo.getProjectName() +
"\n发起人: " + currentUser.getUsername() +
"\n截止时间: " + sdf.format(deadline));
feishuMsgVo.setEnContentUpper("Hello! Please assign the task of filling in Homo Parameter in a timely manner");
feishuMsgVo.setEnContentLower("Project: " + projectInfo.getProjectName() +
"\nInitiator: " + currentUser.getUsername() +
"\nDue Date: " + sdf.format(deadline));
feishuMsgVo.setUrl(hrefFeishu);
feishuMsgVo.setTaskType(MessageTypeEnum.HOMO_TASK.getName());
feishuMsgVo.setProject(projectInfo.getProjectName()); // 车型-年款 区域
feishuMsgVo.setInitiator(currentUser.getUsername());
feishuMsgVo.setDueDate(sdf.format(deadline));
feishuService.sendCardMsg(thirdIds, feishuMsgVo);
feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色
feishuService.sendCard(thirdIds, feishuMsgVo);
} catch (IOException e) {
log.error("飞书消息推送失败");
}
@@ -1755,6 +1870,7 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
return getMsgOfIssueCollection(msgMapList, cut, "1");
}
private List<String> getMsgOfIssueCollection(List<Map<String, String>> msgMapList, String cut, String operation) {
List<String> msgList = new ArrayList<>();
Map<String,String> collectManifestStateEnumMap = CollectManifestStateEnum.toMap(cut);
@@ -3902,4 +4018,153 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
// return map;
// }
/**
* 监控参数收集任务的截止时间,并根据时间段发送飞书
*/
@Override
public void checkDeadline() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String now = sdf.format(new Date());// 当前时间
QueryWrapper<ParamsManifestEO> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("state", ManifestStateEnum.COLLECTING.getValue());
List<ParamsManifestEO> manifestEOS = paramsManifestEOService.list(queryWrapper);
for (ParamsManifestEO manifestEO : manifestEOS) {
//项目名称
ParamsManifestVO projectInfo = paramsManifestEOService.getProjectById(manifestEO.getProjectId());
if (ObjectUtils.isNotEmpty(projectInfo)) {
//url
String urlParamsStr = parseUrlParams(manifestEO);
String hrefFeishu = backUrl + "/ParameterItemCollection" + urlParamsStr;
//查出对应清单
List<ParamsCollectManifestEO> collectManifestEOS = paramsCollectManifestEOMapper.queryByParamManifestId(manifestEO.getId());
Map<String, List<String>> seven = new HashMap<>();
Map<String, List<String>> three = new HashMap<>();
Map<String, List<String>> today = new HashMap<>();
for (ParamsCollectManifestEO collectManifestEO : collectManifestEOS) {
String thirdId = null;
if (CollectManifestStateEnum.WAIT_SDT.getValue().equals(collectManifestEO.getState())
||CollectManifestStateEnum.DRE_BACK.getValue().equals(collectManifestEO.getState())) {
//工程接口人
if (ObjectUtils.isNotEmpty(collectManifestEO.getSdt())) {
SysUser sdt = sysUserService.getUserByName(collectManifestEO.getSdt());
if (ObjectUtils.isNotEmpty(sdt)) {
thirdId = sdt.getThirdId();
}
}
} else if (CollectManifestStateEnum.WAIT_FILL.getValue().equals(collectManifestEO.getState())
||CollectManifestStateEnum.CERT_BACK.getValue().equals(collectManifestEO.getState())) {
//填写人
if (ObjectUtils.isNotEmpty(collectManifestEO.getDre())) {
SysUser dre = sysUserService.getUserByName(collectManifestEO.getDre());
if (ObjectUtils.isNotEmpty(dre)) {
thirdId = dre.getThirdId();
}
}
}
//截止时间
if (ObjectUtils.isNotEmpty(thirdId) && ObjectUtils.isNotEmpty(collectManifestEO.getDeadline())) {
String deadline =sdf.format(collectManifestEO.getDeadline());
//判断日期
int days = 0;
try {
days = (int) (sdf.parse(deadline).getTime() - sdf.parse(now).getTime()) / (24 * 60 * 60 * 1000);
} catch (Exception e) {
e.printStackTrace();
throw new JeroBootException("时间获取失败");
}
if (days == 7) {
deadlineDateMap(seven, collectManifestEO, thirdId);
} else if (days == 3) {
deadlineDateMap(three, collectManifestEO, thirdId);
} else if (now.equals(deadline)) {
deadlineDateMap(today, collectManifestEO, thirdId);
}
}
}
String title = MessageType2Enum.HOMO_PARAMETER_COLLECTION.getCn() + "/" + MessageType2Enum.HOMO_PARAMETER_COLLECTION.getEn();
String cnContentLower = "项目: " + projectInfo.getProjectName() +
"\n发起人: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName();
String enContentLower = "Project: " + projectInfo.getProjectName() +
"\nInitiator: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName();
if (!seven.isEmpty()) {
for (String key : seven.keySet()) {
String[] thirds = new String[1];
thirds[0] = key;
List<String> stringList = seven.get(key);
String join = StringUtils.join(stringList, ",");
try {
FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo();
feishuMsgVo.setTitle(title);
feishuMsgVo.setCnContentUpper("您参与填写的参数"+ join +",还有7天到期,请及时查看处理");
feishuMsgVo.setCnContentLower(cnContentLower);
feishuMsgVo.setEnContentUpper("The parameter "+ join +" you filled in will expire in 7 days. Please check and address it in a timely manner");
feishuMsgVo.setEnContentLower(enContentLower);
feishuMsgVo.setUrl(hrefFeishu);
feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色
feishuService.sendCard(thirds, feishuMsgVo);
} catch (IOException e) {
log.error("飞书消息推送失败");
}
}
}
if (!three.isEmpty()) {
for (String key : three.keySet()) {
String[] thirds = new String[1];
thirds[0] = key;
List<String> stringList = three.get(key);
String join = StringUtils.join(stringList, ",");
try {
FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo();
feishuMsgVo.setTitle(title);
feishuMsgVo.setCnContentUpper("您参与填写的参数"+ join +",还有3天到期,请及时查看处理");
feishuMsgVo.setCnContentLower(cnContentLower);
feishuMsgVo.setEnContentUpper("The parameter "+ join +" you filled in will expire in 3 days. Please check and address it in a timely manner");
feishuMsgVo.setEnContentLower(enContentLower);
feishuMsgVo.setUrl(hrefFeishu);
feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色
feishuService.sendCard(thirds, feishuMsgVo);
} catch (IOException e) {
log.error("飞书消息推送失败");
}
}
}
if (!today.isEmpty()) {
for (String key : today.keySet()) {
String[] thirds = new String[1];
thirds[0] = key;
List<String> stringList = today.get(key);
String join = StringUtils.join(stringList, ",");
try {
FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo();
feishuMsgVo.setTitle(title);
feishuMsgVo.setCnContentUpper("您参与填写的参数"+ join +",将于今天到期,请及时查看处理");
feishuMsgVo.setCnContentLower(cnContentLower);
feishuMsgVo.setEnContentUpper("The parameter "+ join +" you filled in will expire today. Please check and address it in a timely manner");
feishuMsgVo.setEnContentLower(enContentLower);
feishuMsgVo.setUrl(hrefFeishu);
feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色
feishuService.sendCard(thirds, feishuMsgVo);
} catch (IOException e) {
log.error("飞书消息推送失败");
}
}
}
}
}
}
private void deadlineDateMap(Map<String, List<String>> today, ParamsCollectManifestEO collectManifestEO, String thirdId) {
List<String> stringList = today.get(thirdId);
if (ObjectUtils.isEmpty(stringList)) {
stringList = new ArrayList<>();
stringList.add("NIO-" + collectManifestEO.getNioNumber());
today.put(thirdId, stringList);
} else {
stringList.add("NIO-" + collectManifestEO.getNioNumber());
}
}
}
@@ -0,0 +1,30 @@
package com.jero.modules.cert.collect.task;
import com.jero.modules.cert.collect.service.IParamsCollectManifestEOService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class ScheduledTask {
@Autowired
private IParamsCollectManifestEOService paramsCollectManifestEOServicea;
/**
* 监控参数收集任务的截止时间,并根据时间段发送飞书
*/
//@Scheduled(cron = "0 30 14 * * ?")
@Scheduled(cron = "0 0 0 */1 * ?")
public void checkTime() {
log.info("-----checkDeadline-----begin-----------");
paramsCollectManifestEOServicea.checkDeadline();
log.info("-----checkDeadline------end-----------");
}
}
@@ -314,36 +314,38 @@ public class SarFileCompareItemCommentServiceImpl extends ServiceImpl<SarFileCom
row.createCell(1).setCellValue(itemLeft.getItemsNum());
row.createCell(2).setCellValue(itemLeft.getItemsName());
String text = itemLeft.getItemsText();
log.info("-------------- 开始开始拆分左侧图片、文字、表格 :" + text + "-----------------");
String rowDataAndPath = getSplitContent(request, text);
log.info("-------------- 左侧图片、文字、表格 拆分成功 :"+ rowDataAndPath +"-----------------");
leftSplit = rowDataAndPath.split("---");
if (leftSplit.length > 1) {
for (int j = 0; j < leftSplit.length; j++) {
if (ObjectUtils.isNotEmpty(leftSplit[j])) {
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
if (j > 0) {
Row row2 = sheet.getRow(j + i);
if (ObjectUtils.isEmpty(row2)) {
row2 = sheet.createRow(j + i);
if (StringUtils.isNotEmpty(text)){
log.info("-------------- 开始开始拆分左侧图片、文字、表格 :" + text + "-----------------");
String rowDataAndPath = getSplitContent(request, text);
log.info("-------------- 左侧图片、文字、表格 拆分成功 :"+ rowDataAndPath +"-----------------");
leftSplit = rowDataAndPath.split("---");
if (leftSplit.length > 1) {
for (int j = 0; j < leftSplit.length; j++) {
if (ObjectUtils.isNotEmpty(leftSplit[j])) {
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
if (j > 0) {
Row row2 = sheet.getRow(j + i);
if (ObjectUtils.isEmpty(row2)) {
row2 = sheet.createRow(j + i);
}
log.info("-------------- 开始开始处理左侧图片、表格 -----------------");
handleSpecificData(workbook, dir, patriarch, cellStyleLink, byteArrayOut, row2, i, j, leftSplit[j], 3);
log.info("-------------- 左侧图片、表格 处理成功 -----------------");
} else {
log.info("-------------- 开始开始处理左侧图片、表格 -----------------");
handleSpecificData(workbook, dir, patriarch, cellStyleLink, byteArrayOut, row, i, j, leftSplit[j], 3);
log.info("-------------- 左侧图片、表格 处理成功 -----------------");
}
log.info("-------------- 开始开始处理左侧图片、表格 -----------------");
handleSpecificData(workbook, dir, patriarch, cellStyleLink, byteArrayOut, row2, i, j, leftSplit[j], 3);
log.info("-------------- 左侧图片、表格 处理成功 -----------------");
} else {
log.info("-------------- 开始开始处理左侧图片、表格 -----------------");
handleSpecificData(workbook, dir, patriarch, cellStyleLink, byteArrayOut, row, i, j, leftSplit[j], 3);
log.info("-------------- 左侧图片、表格 处理成功 -----------------");
}
}
sarFileCompareExcelMergeCell.setLeftStart(i);
sarFileCompareExcelMergeCell.setLeftEnd(i + leftSplit.length - 1);
sarFileCompareExcelMergeCell.setRightStart(0);
sarFileCompareExcelMergeCell.setRightEnd(0);
mergeCells.add(sarFileCompareExcelMergeCell);
} else {
row.createCell(3).setCellValue(rowDataAndPath);
}
sarFileCompareExcelMergeCell.setLeftStart(i);
sarFileCompareExcelMergeCell.setLeftEnd(i + leftSplit.length - 1);
sarFileCompareExcelMergeCell.setRightStart(0);
sarFileCompareExcelMergeCell.setRightEnd(0);
mergeCells.add(sarFileCompareExcelMergeCell);
} else {
row.createCell(3).setCellValue(rowDataAndPath);
}
}
}
@@ -354,34 +356,36 @@ public class SarFileCompareItemCommentServiceImpl extends ServiceImpl<SarFileCom
row.createCell(5).setCellValue(itemRight.getItemsNum());
row.createCell(6).setCellValue(itemRight.getItemsName());
String text = itemRight.getItemsText();
log.info("-------------- 开始开始拆分右侧图片、文字、表格 :"+ text +" -----------------");
String rowDataAndPath = getSplitContent(request, text);
log.info("-------------- 右侧图片、文字、表格 拆分成功 :"+ rowDataAndPath +" -----------------");
rightSplit = rowDataAndPath.split("---");
if (rightSplit.length > 1) {
for (int j = 0; j < rightSplit.length; j++) {
if (ObjectUtils.isNotEmpty(rightSplit[j])) {
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
if (j > 0) {
Row row2 = sheet.getRow(j + i);
if (ObjectUtils.isEmpty(row2)) {
row2 = sheet.createRow(j + i);
if (StringUtils.isNotEmpty(text)) {
log.info("-------------- 开始开始拆分右侧图片、文字、表格 :"+ text +" -----------------");
String rowDataAndPath = getSplitContent(request, text);
log.info("-------------- 右侧图片、文字、表格 拆分成功 :"+ rowDataAndPath +" -----------------");
rightSplit = rowDataAndPath.split("---");
if (rightSplit.length > 1) {
for (int j = 0; j < rightSplit.length; j++) {
if (ObjectUtils.isNotEmpty(rightSplit[j])) {
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
if (j > 0) {
Row row2 = sheet.getRow(j + i);
if (ObjectUtils.isEmpty(row2)) {
row2 = sheet.createRow(j + i);
}
log.info("-------------- 开始处理右侧图片、表格 -----------------");
handleSpecificData(workbook, dir, patriarch, cellStyleLink, byteArrayOut, row2, i, j, rightSplit[j], 7);
log.info("-------------- 右侧图片、表格 处理成功 -----------------");
} else {
log.info("-------------- 开始处理右侧图片、表格 -----------------");
handleSpecificData(workbook, dir, patriarch, cellStyleLink, byteArrayOut, row, i, j, rightSplit[j], 7);
log.info("-------------- 右侧图片、表格 处理成功 -----------------");
}
log.info("-------------- 开始处理右侧图片、表格 -----------------");
handleSpecificData(workbook, dir, patriarch, cellStyleLink, byteArrayOut, row2, i, j, rightSplit[j], 7);
log.info("-------------- 右侧图片、表格 处理成功 -----------------");
} else {
log.info("-------------- 开始处理右侧图片、表格 -----------------");
handleSpecificData(workbook, dir, patriarch, cellStyleLink, byteArrayOut, row, i, j, rightSplit[j], 7);
log.info("-------------- 右侧图片、表格 处理成功 -----------------");
}
}
sarFileCompareExcelMergeCell.setRightStart(i);
sarFileCompareExcelMergeCell.setRightEnd(i + rightSplit.length - 1);
mergeCells.add(sarFileCompareExcelMergeCell);
} else {
row.createCell(7).setCellValue(rowDataAndPath);
}
sarFileCompareExcelMergeCell.setRightStart(i);
sarFileCompareExcelMergeCell.setRightEnd(i + rightSplit.length - 1);
mergeCells.add(sarFileCompareExcelMergeCell);
} else {
row.createCell(7).setCellValue(rowDataAndPath);
}
}
}
@@ -393,7 +397,9 @@ public class SarFileCompareItemCommentServiceImpl extends ServiceImpl<SarFileCom
cell.setCellStyle(cellStyle);
}
}
i = i + leftSplit.length;
int left_length = ObjectUtils.isEmpty(leftSplit) ? 0 : leftSplit.length;
int right_length = ObjectUtils.isEmpty(rightSplit) ? 0 : rightSplit.length;
i = left_length > right_length ? i + left_length : i + right_length;
}
if (includeComments || StringUtils.isEmpty(selectIds)) {
Row row = sheet.createRow(i);
@@ -2208,9 +2208,18 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
//飞书
try {
String contentInfoFeiShu = "In the "+ technologyTerritoryName
+ " technical field you subscribed to, the "
+ serialNumber +" has been updated.";
iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), contentInfoFeiShu, MessageTypeEnum.PUSH.getName(), hrefTemp);
+ " technical field you subscribed to, the "+
category + " " + serialNumber +" has been updated.";
String contentInfoFeiShuCn = "您所订阅的" + technologyTerritoryName + "技术领域中更新了" + category + " " + serialNumber;;
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
feishuMsgVo.setTitle(MessageTypeEnum.READ.getNameCn()+"/"+MessageTypeEnum.READ.getName());
feishuMsgVo.setUrl(hrefTemp);
feishuMsgVo.setContentEn(contentInfoFeiShu);
feishuMsgVo.setContent(contentInfoFeiShuCn);
iFeishuService.sendCardMsgTerritory(thirdIdList.toArray(new String[]{}), feishuMsgVo);
// iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), contentInfoFeiShu, MessageTypeEnum.PUSH.getName(), hrefTemp);
} catch (IOException e) {
log.error("飞书消息推送失败");
}
@@ -2980,13 +2989,13 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
if (ObjectUtils.isNotEmpty(value)) {
if (ObjectUtils.isNotEmpty(valueTemp) && !value.equals(valueTemp)) {
if("1".equals(flag)){
sb.append(dbFieldTxt +" from \""+ value + "\" to \"" + valueTemp + "\",");
sb.append(dbFieldTxt +" was changed from \""+ value + "\" to \"" + valueTemp + "\",");
}else{
sb.append(dbFieldTxt + "\"" + value + "\"改为\"" + valueTemp + "\",");
}
} else if (ObjectUtils.isEmpty(valueTemp)) {
if("1".equals(flag)){
sb.append(dbFieldTxt + " from \""+value + "\" to null " + ",");
sb.append(dbFieldTxt + " was changed from \""+value + "\" to null " + ",");
}else{
sb.append(dbFieldTxt + "\"" + value + "\"改为空" + ",");
}
@@ -2994,7 +3003,7 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
} else {
if (ObjectUtils.isNotEmpty(valueTemp)) {
if("1".equals(flag)){
sb.append(dbFieldTxt + " from null to \"" + valueTemp + "\",");
sb.append(dbFieldTxt + " was changed from null to \"" + valueTemp + "\",");
}else{
sb.append(dbFieldTxt + "由空改为\"" + valueTemp + "\",");
}
@@ -3023,13 +3032,13 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
if (fileNameListTemp.size() != 0 && !checkDiffrent) {
if("1".equals(flag)){
//sysUser
sb.append(dbFieldTxt +" from \""+ StringUtils.join(fileNameList, ",") + "\" to \"" + StringUtils.join(fileNameListTemp, ",") + "\",");
sb.append(dbFieldTxt +" was changed from \""+ StringUtils.join(fileNameList, ",") + "\" to \"" + StringUtils.join(fileNameListTemp, ",") + "\",");
}else{
sb.append(dbFieldTxt + "\"" + StringUtils.join(fileNameList, ",") + "\"改为\"" + StringUtils.join(fileNameListTemp, ",") + "\",");
}
} else if (fileNameListTemp.size() == 0) {
if("1".equals(flag)){
sb.append(dbFieldTxt + " from \""+StringUtils.join(fileNameList, ",") + "\" to null " + ",");
sb.append(dbFieldTxt + " was changed from \""+StringUtils.join(fileNameList, ",") + "\" to null " + ",");
}else{
sb.append(dbFieldTxt + "\"" + StringUtils.join(fileNameList, ",") + "\"改为空" + ",");
}
@@ -3038,7 +3047,7 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
} else {
if (fileNameListTemp.size() != 0) {
if("1".equals(flag)){
sb.append(dbFieldTxt + " from null to \"" + StringUtils.join(fileNameListTemp, ",") + "\",");
sb.append(dbFieldTxt + " was changed from null to \"" + StringUtils.join(fileNameListTemp, ",") + "\",");
}else{
sb.append(dbFieldTxt + "由空改为\"" + StringUtils.join(fileNameListTemp, ",") + "\",");
}
@@ -3059,13 +3068,13 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
if (ObjectUtils.isNotEmpty(value)) {
if (ObjectUtils.isNotEmpty(valueTemp) && !value.equals(valueTemp)) {
if("1".equals(flag)){
sb.append(dbFieldTxt +" from \""+ value + "\" to \"" + valueTemp + "\",");
sb.append(dbFieldTxt +" was changed from \""+ value + "\" to \"" + valueTemp + "\",");
}else{
sb.append(dbFieldTxt + "\"" + value + "\"改为\"" + valueTemp + "\",");
}
} else if (ObjectUtils.isEmpty(valueTemp)) {
if("1".equals(flag)){
sb.append(dbFieldTxt + " from \""+value + "\" to null " + ",");
sb.append(dbFieldTxt + " was changed from \""+value + "\" to null " + ",");
}else{
sb.append(dbFieldTxt + "\"" + value + "\"改为空" + ",");
}
@@ -3073,7 +3082,203 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
} else {
if (ObjectUtils.isNotEmpty(valueTemp)) {
if("1".equals(flag)){
sb.append(dbFieldTxt + " from null to \"" + valueTemp + "\",");
sb.append(dbFieldTxt + " was changed from null to \"" + valueTemp + "\",");
}else{
sb.append(dbFieldTxt + "由空改为\"" + valueTemp + "\",");
}
}
}
}
}
}
}
}
}
});
return sb;
}
@NotNull
private StringBuilder getUpdateInfoCn(Map<String, Object> map, List<Map<String, Object>> dataList,
List<OnlCgformField> fieldList, List<OnlCgformField> fieldDateList,
List<OnlCgformField> fieldFileList, List<OnlCgformField> fieldPullList,
String cut,String flagTemp) {
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
//调整dataList中map中字段顺序与表单中的一致
Map<String, Object> mapNew = new LinkedHashMap<>();
for (OnlCgformField onlCgformField : fieldList) {
for (Map.Entry<String, Object> entry : dataList.get(0).entrySet()) {
if (onlCgformField.getDbFieldName().equals(entry.getKey())) {
mapNew.put(entry.getKey(), entry.getValue());
break;
}
}
}
dataList.remove(0);
dataList.add(mapNew);
Map<String, Object> mapTemp = new HashMap<>();
mapCopy(map, mapTemp);
//时间类型的字段
List<String> fieldDate = fieldDateList.stream().map(OnlCgformField::getDbFieldName).collect(Collectors.toList());
//文件类型的字段
List<String> fieldFile = fieldFileList.stream().map(OnlCgformField::getDbFieldName).collect(Collectors.toList());
//下拉类型的字段
//过滤出树形字段
List<OnlCgformField> treeFieldList = fieldList.stream()
.filter(e -> FieldTypeEnum.TREE.getValue().equals(e.getFieldShowType()))
.collect(Collectors.toList());
//数据字典
List<SysDictItem> sysDictItems = sysDictItemServiceImpl.selectItemsAll();
//树形数据字典
List<SysCategory> categoryList = sysCategoryService.list();
//下拉选处理数据字典
for (Map.Entry<String, Object> entry : dataList.get(0).entrySet()) {
//下拉选处理数据字典
dictItemCn(sysDictItems, entry, cut, fieldList,flagTemp);
treeDictItemCn(categoryList, entry, treeFieldList, cut,flagTemp);
}
for (Map.Entry<String, Object> entry : mapTemp.entrySet()) {
//下拉选处理数据字典
dictItemCn(sysDictItems, entry, cut, fieldList,flagTemp);
treeDictItemCn(categoryList, entry, treeFieldList, cut,flagTemp);
}
StringBuilder sb = new StringBuilder();
dataList.get(0).entrySet().forEach(entry -> {
String key = entry.getKey();
Object value = entry.getValue();
//字段中文名
List<OnlCgformField> fields = fieldList.stream().filter(e -> e.getDbFieldName().equals(key)).collect(Collectors.toList());
if (fields.size() != 0) {
String dbFieldTxt = fields.get(0).getDbFieldTxt();
if("2".equals(flagTemp)){
dbFieldTxt = fields.get(0).getDbFieldTxt();
}else{
dbFieldTxt = fields.get(0).getDbFieldTxt();
}
dbFieldTxt = "<text class='highlight-class'>" + dbFieldTxt + "</text>";
if (value == null) {
value = "";
}
for (Map.Entry<String, Object> entryTemp : mapTemp.entrySet()) {
String keyTemp = entryTemp.getKey();
Object valueTemp = entryTemp.getValue();
if (valueTemp == null) {
valueTemp = "";
}
if (!"create_time".equals(key) && !"update_time".equals(key)) {
if (key.equals(keyTemp)) {
if (fieldDate.contains(key)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
if (ObjectUtils.isNotEmpty(value)) {
value = sdf.format(value);
}
if (ObjectUtils.isNotEmpty(valueTemp)) {
try {
valueTemp = sdf.format(sdf.parse((String) valueTemp));
} catch (ParseException e) {
}
}
//处理时间类型字段
if (ObjectUtils.isNotEmpty(value)) {
if (ObjectUtils.isNotEmpty(valueTemp) && !value.equals(valueTemp)) {
if("2".equals(flagTemp)){
sb.append(dbFieldTxt + "\"" + value + "\"改为\"" + valueTemp + "\",");
}else{
sb.append(dbFieldTxt + "\"" + value + "\"改为\"" + valueTemp + "\",");
}
} else if (ObjectUtils.isEmpty(valueTemp)) {
if("2".equals(flagTemp)){
sb.append(dbFieldTxt + "\"" + value + "\"改为空" + ",");
}else{
sb.append(dbFieldTxt + "\"" + value + "\"改为空" + ",");
}
}
} else {
if (ObjectUtils.isNotEmpty(valueTemp)) {
if("2".equals(flagTemp)){
sb.append(dbFieldTxt + "由空改为\"" + valueTemp + "\",");
}else{
sb.append(dbFieldTxt + "由空改为\"" + valueTemp + "\",");
}
}
}
} else if (fieldFile.contains(key)) {
//处理文件类型字段
List<String> fileNameList = new ArrayList<>();
List<String> fileNameListTemp = new ArrayList<>();
//之前的文件
if (ObjectUtils.isNotEmpty(value)) {
List<OSSFile> fileInfos = iOSSFileService.getFileInfosByConnectId((String) value);
fileNameList = fileInfos.stream().map(OSSFile::getFileName).collect(Collectors.toList());
}
//修改的文件
if (ObjectUtils.isNotEmpty(valueTemp)) {
List<OSSFile> fileInfosTemp = iOSSFileService.getFileInfos((String) valueTemp);
fileNameListTemp = fileInfosTemp.stream().map(OSSFile::getFileName).collect(Collectors.toList());
}
if (ObjectUtils.isNotEmpty(value)) {
boolean checkDiffrent = checkDiffrent(fileNameList, fileNameListTemp);
if (fileNameListTemp.size() != 0 && !checkDiffrent) {
if("2".equals(flagTemp)){
//sysUser
sb.append(dbFieldTxt + "\"" + StringUtils.join(fileNameList, ",") + "\"改为\"" + StringUtils.join(fileNameListTemp, ",") + "\",");
}else{
sb.append(dbFieldTxt + "\"" + StringUtils.join(fileNameList, ",") + "\"改为\"" + StringUtils.join(fileNameListTemp, ",") + "\",");
}
} else if (fileNameListTemp.size() == 0) {
if("2".equals(flagTemp)){
sb.append(dbFieldTxt + "\"" + StringUtils.join(fileNameList, ",") + "\"改为空" + ",");
}else{
sb.append(dbFieldTxt + "\"" + StringUtils.join(fileNameList, ",") + "\"改为空" + ",");
}
}
} else {
if (fileNameListTemp.size() != 0) {
if("2".equals(flagTemp)){
sb.append(dbFieldTxt + "由空改为\"" + StringUtils.join(fileNameListTemp, ",") + "\",");
}else{
sb.append(dbFieldTxt + "由空改为\"" + StringUtils.join(fileNameListTemp, ",") + "\",");
}
}
}
} else {
// if ("replace_standard".equals(key) || "corresponding_standard".equals(key)) {
// if (ObjectUtils.isNotEmpty(value)) {
// value = getReplaceStandardName(value);
// }
// if (ObjectUtils.isNotEmpty(valueTemp)) {
// valueTemp = getReplaceStandardName(valueTemp);
// }
// }
//其他类型(被代替标准不处理)
if (!"replaced_standard".equals(key)) {
if (ObjectUtils.isNotEmpty(value)) {
if (ObjectUtils.isNotEmpty(valueTemp) && !value.equals(valueTemp)) {
if("2".equals(flagTemp)){
sb.append(dbFieldTxt + "\"" + value + "\"改为\"" + valueTemp + "\",");
}else{
sb.append(dbFieldTxt + "\"" + value + "\"改为\"" + valueTemp + "\",");
}
} else if (ObjectUtils.isEmpty(valueTemp)) {
if("2".equals(flagTemp)){
sb.append(dbFieldTxt + "\"" + value + "\"改为空" + ",");
}else{
sb.append(dbFieldTxt + "\"" + value + "\"改为空" + ",");
}
}
} else {
if (ObjectUtils.isNotEmpty(valueTemp)) {
if("2".equals(flagTemp)){
sb.append(dbFieldTxt + "由空改为\"" + valueTemp + "\",");
}else{
sb.append(dbFieldTxt + "由空改为\"" + valueTemp + "\",");
}
@@ -3114,20 +3319,34 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
List<OnlCgformField> fieldFileList,
List<OnlCgformField> fieldPullList,
String cut) {
List<Map<String, Object>> dataListTemp = new ArrayList<>();
for (Map<String, Object> stringObjectMap : dataList) {
Map<String, Object> mapT = new HashMap<>();
mapCopy(stringObjectMap, mapT);
dataListTemp.add(mapT);
}
String technologyTerritoryNew = (String) dataList.get(0).get("technology_territory");
//1. 处理订阅的发送消息
//修改的内容
String flag ="1";//消息的标识(英文)
StringBuilder sb = getUpdateInfo(map, dataList, fieldList, fieldDateList, fieldFileList, fieldPullList, null,flag);
String flagTemp ="2";//消息的标识(中文--消息采用卡片型式发送, 消息内容包含中英文, 所以此处需要获取消息的中文)
StringBuilder sbCn = getUpdateInfoCn(map, dataListTemp, fieldList, fieldDateList, fieldFileList, fieldPullList, null,flagTemp);
//树形数据字典
List<SysCategory> categoryList = sysCategoryService.list();
String sbStr = "";
if (ObjectUtils.isNotEmpty(sb)) {
sbStr = sb.substring(0, sb.length() - 1);
}
String sbStrCn = "";
if (ObjectUtils.isNotEmpty(sbCn)) {
sbStrCn = sbCn.substring(0, sbCn.length() - 1);
}
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String serialNumber = (String) dataList.get(0).get("serial_number");
String category = (String)map.get("lei4_bie2");
String categoryCn = (String)map.get("lei4_bie2");
String technologyTerritory = (String) map.get("technology_territory");
if(StringUtils.isNotBlank(category)){
List<SysDictItem> dictItemList = sysDictItemServiceImpl.selectItemsAll();
@@ -3137,12 +3356,14 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
.collect(Collectors.toList());
if(stateDictItemList.size() != 0){
category = stateDictItemList.get(0).getEnName();
categoryCn = stateDictItemList.get(0).getItemText();
}
}else{
category = "";
}
//只要修改了标准,就需要向订阅用户发送消息(内容为-->XXX对GB 7258 进行了修改请及时查看)
//向订阅领域管理中订阅了该技术领域的人和文档库中订阅了该条文档的人发送消息
// 只有技术领域变更为订阅的技术领域这一种情况发消息, 假如订阅了技术领域A,编辑的文档的技术领域也是A,这时编辑的是其他的字段,这种情况不发消息
Map<String, Object> mapTemp = new HashMap<>();
mapTemp.put("domainId", map.get("technology_territory"));
mapTemp.put("documentId", map.get("id"));
@@ -3223,10 +3444,18 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
// thirdIdListAll = thirdIdListAll.stream().distinct().collect(Collectors.toList());
String contentInfoFei = "In the " + technologyTerritoryNameEn + " technical field you subscribed to, the " +
category + " " + serialNumber+" has been updated.";
String contentInfoFeiCn = "您所订阅的" + technologyTerritoryNameEn + "技术领域中更新了" + categoryCn + " " + serialNumber;
try {
//跳转文档详情
String url = backUrl + "/docManage/library/detail?id=" + id;
iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), contentInfoFei, MessageTypeEnum.READ.getName(), url);
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
feishuMsgVo.setTitle(MessageTypeEnum.READ.getNameCn()+"/"+MessageTypeEnum.READ.getName());
feishuMsgVo.setUrl(url);
feishuMsgVo.setContentEn(contentInfoFei);
feishuMsgVo.setContent(contentInfoFeiCn);
iFeishuService.sendCardMsgTerritory(thirdIdList.toArray(new String[]{}), feishuMsgVo);
// iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), contentInfoFei, MessageTypeEnum.READ.getName(), url);
} catch (IOException e) {
log.error("文档新增飞书消息推送失败");
}
@@ -3272,13 +3501,28 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
}
//订阅文档的飞书消息
try {
// String contentInfoFei = "In the " + technologyTerritoryNameEn + " technical field you subscribed to, the " +
// category + " " + serialNumber+" has been updated.";
String contentInfoFei = "In the "+category + " " + serialNumber +" you subscribed to, "+sysUser.getUsername()+" changed the " + sbStr.toString();;
//英文消息
String contentInfoFei = "In the "+category + " " + serialNumber +" you subscribed to, "+ sbStr.toString();;
//中文消息
String contentInfoFeiCn ="您所订阅的"+categoryCn+ serialNumber +","+ sbStrCn.toString();;
//跳转文档详情
String url = backUrl + "/docManage/library/detail?id=" + id;
iFeishuService.batchSendMessage(userIdListUpdateFeishu.toArray(new String[]{}), contentInfoFei, MessageTypeEnum.READ.getName(), url);
// iFeishuService.batchSendMessage(userIdListUpdateFeishu.toArray(new String[]{}), content, MessageTypeEnum.READ.getName(), url);
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
feishuMsgVo.setTitle(MessageTypeEnum.READ.getNameCn()+"/"+MessageTypeEnum.READ.getName());
feishuMsgVo.setUrl(url);
String replaceAll = contentInfoFei.replaceAll("\"", "<");
feishuMsgVo.setContentEn(replaceAll);
String replaceAllCn = contentInfoFeiCn.replaceAll("<text class='highlight-class'>", "")
.replaceAll("</text>","").replaceAll("\"", "<");
feishuMsgVo.setContent(replaceAllCn);
//
iFeishuService.sendCardMsgDocument(userIdListUpdateFeishu.toArray(new String[]{}), feishuMsgVo);
// String contentInfoFei = "In the "+category + " " + serialNumber +" you subscribed to, "+sysUser.getUsername()+" changed the " + sbStr.toString();;
// //跳转文档详情
// String url = backUrl + "/docManage/library/detail?id=" + id;
// iFeishuService.batchSendMessage(userIdListUpdateFeishu.toArray(new String[]{}), contentInfoFei, MessageTypeEnum.READ.getName(), url);
} catch (IOException e) {
log.error("文档新增飞书消息推送失败");
}
@@ -3932,6 +4176,64 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
}
}
}
/**
* 用于获取飞书消息中的中文消息
*
* @param sysDictItems
* @param entry
*/
public void dictItemCn(List<SysDictItem> sysDictItems, Map.Entry<String, Object> entry, String cut, List<OnlCgformField> fieldList,String flagTemp) {
//通过dictField判断字段是否为下拉选(不为空则为下拉选)
List<OnlCgformField> onlCgformFieldList = fieldList.stream().filter(e -> entry.getKey().equals(e.getDbFieldName())).collect(Collectors.toList());
//数据字典中文
List<String> dictItemsCh = new ArrayList<>();
List<String> dictItemsEn = new ArrayList<>();
for (OnlCgformField onlCgformField : onlCgformFieldList) {
if (FieldTypeEnum.PULL_SINGLE.getValue().equals(onlCgformField.getFieldShowType())
|| FieldTypeEnum.PULL_MORE.getValue().equals(onlCgformField.getFieldShowType())) {
String value = (String) entry.getValue();
if (StringUtils.isNotBlank(value) && onlCgformFieldList.size() != 0 && StringUtils.isNotBlank(onlCgformFieldList.get(0).getDictField())) {
for (String itemValue : value.split(",")) {
//字段的数据字典
List<SysDictItem> dictItemList = sysDictItems.stream()
.filter(e -> StringUtils.isNotBlank(e.getDictCode()) && e.getDictCode().equals(onlCgformFieldList.get(0).getDictField()))
.collect(Collectors.toList());
if (dictItemList.size() != 0) {
List<SysDictItem> dictItems = dictItemList.stream()
.filter(e -> itemValue.equals(e.getItemValue()))
.collect(Collectors.toList());
if (dictItems.size() != 0) {
List<String> itemText = new ArrayList<>();
if (CutEnum.CN.getValue().equals(cut)) {
itemText = dictItems.stream().map(SysDictItem::getItemText).collect(Collectors.toList());
} else if(CutEnum.EN.getValue().equals(cut)) {
itemText = dictItems.stream().map(SysDictItem::getEnName).collect(Collectors.toList());
}else if("2".equals(flagTemp)){
itemText = dictItems.stream().map(SysDictItem::getItemText).collect(Collectors.toList());
}
dictItemsCh.addAll(itemText);
dictItemsEn.addAll(itemText);
}
}
}
}
}
}
if (onlCgformFieldList.size() != 0 && StringUtils.isNotBlank(onlCgformFieldList.get(0).getDictField())) {
if(FieldTypeEnum.PULL_SINGLE.getValue().equals(onlCgformFieldList.get(0).getFieldShowType())
|| FieldTypeEnum.PULL_MORE.getValue().equals(onlCgformFieldList.get(0).getFieldShowType())){
if (CutEnum.CN.getValue().equals(cut)) {
entry.setValue(StringUtils.join(dictItemsCh, ","));
} else if(CutEnum.EN.getValue().equals(cut)){
entry.setValue(StringUtils.join(dictItemsEn, ","));
}else if("2".equals(flagTemp)){
entry.setValue(StringUtils.join(dictItemsEn, ","));
}
}
}
}
@Override
@@ -4906,10 +5208,15 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
}
});
String contentTemp = sysUser.getUsername() + " shared " + StringUtils.join(list, ",") + " with you, please be reminded to check it out.";
// String contentTemp = sysUser.getUsername() + " pushed " + StringUtils.join(list, ",") + " to you. Please be reminded to check it out.";
// FeishuMsgVo feishuMsgVo = getFeishuMsgVo(MessageTypeEnum.PUSH.getName(),null, contentTemp, encode);
// iFeishuService.sendCardMsg(thirdIdList.toArray(new String[]{}), feishuMsgVo);
iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), contentTemp, MessageTypeEnum.PUSH.getName(), encode);
String contentTempCn = sysUser.getUsername() + "向您分享了" + StringUtils.join(list, ",") + "请查看.";
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
feishuMsgVo.setTitle(MessageTypeEnum.PUSH.getNameCn()+"/"+MessageTypeEnum.PUSH.getName());
feishuMsgVo.setUrl(encode);
feishuMsgVo.setContentEn(contentTemp);
feishuMsgVo.setContent(contentTempCn);
iFeishuService.sendCardMsgTerritory(thirdIdList.toArray(new String[]{}),feishuMsgVo);
// iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), contentTemp, MessageTypeEnum.PUSH.getName(), encode);
}
} catch (IOException e) {
log.error("飞书推送失败");
@@ -4956,6 +5263,34 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
}
}
}
/**
* 用于获取飞书消息中的中文消息
*
* @param categoryList
* @param entry
* @param treeFieldList
* @param cut
*/
public void treeDictItemCn(List<SysCategory> categoryList, Map.Entry<String, Object> entry, List<OnlCgformField> treeFieldList, String cut,String flagTemp) {
List<String> treeFields = treeFieldList.stream().map(OnlCgformField::getDbFieldName).collect(Collectors.toList());
String key = entry.getKey();
if (treeFields.contains(entry.getKey())) {
String value = StringUtils.valueOf(entry.getValue());
if (StringUtils.isNotBlank(value)) {
List<String> idList = Arrays.asList(value.split(","));
List<SysCategory> sysCategoryList = categoryList.stream().filter(e -> idList.contains(e.getId())).collect(Collectors.toList());
List<String> nameList = sysCategoryList.stream().map(SysCategory::getName).collect(Collectors.toList());
List<String> nameEnList = sysCategoryList.stream().map(SysCategory::getEnName).collect(Collectors.toList());
if (CutEnum.CN.getValue().equals(cut)) {
entry.setValue(StringUtils.join(nameList, ","));
} else if(CutEnum.EN.getValue().equals(cut)){
entry.setValue(StringUtils.join(nameEnList, ","));
}else if("2".equals(flagTemp)){
entry.setValue(StringUtils.join(nameList, ","));
}
}
}
}
@SneakyThrows
@@ -29,6 +29,7 @@ import com.jero.modules.dummy.service.IDummyInventoryInfoEOService;
import com.jero.modules.dummy.service.IDummyReadEOService;
import com.jero.modules.dummy.vo.VirtualCreaterVo;
import com.jero.modules.feishu.service.IFeishuService;
import com.jero.modules.feishu.vo.FeishuMsgVo;
import com.jero.modules.oss.entity.OSSFile;
import com.jero.modules.oss.service.IOSSFileService;
import com.jero.modules.system.entity.SysAnnouncement;
@@ -366,6 +367,7 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl<DummyInventoryB
List<DummyInventoryInfoEO> dummyInventoryInfoEOList = iDummyInventoryInfoEOService.list(lambdaQueryWrapper);
String contentLog = "The "+ baseEO.getName()+" virtual list you subscribed to has been updated as follows" + "</br>";
String contentLogFeishu = "The "+ baseEO.getName()+" virtual list you subscribed to has been updated as follows" + " ";
String contentLogFeishuTemp = "The "+ baseEO.getName()+" virtual list you subscribed to has been updated as follows" + " ";
if(dummyContentChangeEOList.size() == 0){
//没有添加过需要进行第一次添加
@@ -449,7 +451,15 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl<DummyInventoryB
if(thirdIdList.size() != 0){
String href = backUrl + "/virtualListDetails?name=" + baseEO.getName() + "&useExplain=" + baseEO.getUseExplain() +"&id=" + baseEO.getId() +"&title=维护虚拟清单";
try {
iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), contentLogFeishu, MessageTypeEnum.PUSH.getName(), href);
String contentInfoFeiCn = "您所订阅的"+baseEO.getName()+"虚拟清单已更新,更新内容如下:";
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
feishuMsgVo.setTitle(MessageTypeEnum.READ.getNameCn()+"/"+MessageTypeEnum.READ.getName());
feishuMsgVo.setUrl(href);
feishuMsgVo.setContentEn(contentLogFeishuTemp);
feishuMsgVo.setContent(contentInfoFeiCn);
iFeishuService.sendCardMsgVirtua(thirdIdList.toArray(new String[]{}),feishuMsgVo,serialNumberAddList,serialNumberDeleteList);
// iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), contentLogFeishu, MessageTypeEnum.PUSH.getName(), href);
} catch (IOException e) {
e.printStackTrace();
}
@@ -490,8 +500,15 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl<DummyInventoryB
//飞书
if(thirdIdList.size() != 0){
String contentInfoTemp = "Please note that the "+ baseEO.getName()+" virtual list you subscribed to has been withdrawn.";
String contentInfoFeiCn = "您订阅的虚拟清单"+ baseEO.getName()+"已被撤回.";
String href = backUrl + "/virtualListDetails?name=" + baseEO.getName() + "&useExplain=" + baseEO.getUseExplain() +"&id=" + baseEO.getId() +"&title=维护虚拟清单";
iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), contentInfoTemp, MessageTypeEnum.PUSH.getName(), href);
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
feishuMsgVo.setTitle(MessageTypeEnum.READ.getNameCn()+"/"+MessageTypeEnum.READ.getName());
feishuMsgVo.setUrl(href);
feishuMsgVo.setContentEn(contentInfoTemp);
feishuMsgVo.setContent(contentInfoFeiCn);
iFeishuService.sendCardMsgVirtua(thirdIdList.toArray(new String[]{}), feishuMsgVo,null,null);
// iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), contentInfoTemp, MessageTypeEnum.PUSH.getName(), href);
}
}catch (Exception e){
e.printStackTrace();
@@ -1,9 +1,11 @@
package com.jero.modules.feishu.service;
import com.alibaba.fastjson.JSONObject;
import com.jero.modules.feishu.vo.FeishuMsg2Vo;
import com.jero.modules.feishu.vo.FeishuMsgVo;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/**
@@ -38,6 +40,42 @@ public interface IFeishuService {
*/
String sendCardMsg(String[] userIds, FeishuMsgVo feishuMsgVo) throws IOException;
/**
* 文档库卡片消息
* @param userIds
* @param feishuMsgVo
* @return
* @throws IOException
*/
String sendCardMsgDocument(String[] userIds, FeishuMsgVo feishuMsgVo) throws IOException;
/**
* 订阅领域(飞书消息)
* @param userIds
* @param feishuMsgVo
* @return
* @throws IOException
*/
String sendCardMsgTerritory(String[] userIds, FeishuMsgVo feishuMsgVo) throws IOException;
/**
* 预警推送(飞书消息)
* @param userIds
* @param feishuMsgVo
* @return
* @throws IOException
*/
String sendCardMsgWarn(String[] userIds, FeishuMsgVo feishuMsgVo) throws IOException;
/**
* 虚拟清单(飞书消息)
* @param userIds
* @param feishuMsgVo
* @return
* @throws IOException
*/
String sendCardMsgVirtua(String[] userIds, FeishuMsgVo feishuMsgVo, List<String> serialNumberAddList,List<String> serialNumberDeleteList) throws IOException;
/**
* 翻译文本
* @param params
@@ -62,4 +100,7 @@ public interface IFeishuService {
* @param split
*/
void sendKnowledgeBaseTypeChargePersonCard(String[] split);
void sendCard(String[] thirdIds, FeishuMsg2Vo feishuMsgVo) throws IOException;
}
@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.modules.feishu.service.IFeishuService;
import com.jero.modules.feishu.vo.FeishuMsg2Vo;
import com.jero.modules.feishu.vo.FeishuMsgVo;
import com.jero.modules.problemKnowledgeBase.entity.ProblemKnowledgeBaseClassifyEO;
import com.jero.modules.problemKnowledgeBase.entity.ProblemKnowledgeBaseEO;
@@ -24,6 +25,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@@ -280,6 +282,457 @@ public class FeishuServiceImpl implements IFeishuService {
return tokenJson.get("msg").toString();
}
/**
* 文档库卡片消息
* @param userIds
* @param feishuMsgVo
* @return
* @throws IOException
*/
public String sendCardMsgDocument(String[] userIds, FeishuMsgVo feishuMsgVo) throws IOException {
String token = getTenantAccessToken();
// 设置请求头
Map<String, String> headerMap = new HashMap<>();
headerMap.put("Authorization", "Bearer " + token);
headerMap.put("Content-Type", "application/json; charset=utf-8");
// 示例
StringBuilder contentSb = new StringBuilder();
contentSb.append("{");
contentSb.append("\"elements\": [");
// 内容中文
if (StrUtil.isNotEmpty(feishuMsgVo.getContent())){
contentSb.append("{");
contentSb.append("\"tag\": \"div\",");
contentSb.append("\"text\": {");
contentSb.append("\"content\": \"" + feishuMsgVo.getContent() + "\",");
contentSb.append("\"tag\": \"lark_md\"");
contentSb.append("}");
contentSb.append("},");
};
contentSb.append("{\"tag\": \"hr\"},");
//内容英文
if (StrUtil.isNotEmpty(feishuMsgVo.getContentEn())){
contentSb.append("{");
contentSb.append("\"tag\": \"div\",");
contentSb.append("\"text\": {");
contentSb.append("\"content\": \"" + feishuMsgVo.getContentEn() + "\",");
contentSb.append("\"tag\": \"lark_md\"");
contentSb.append("}");
contentSb.append("},");
};
contentSb.append("{");
contentSb.append("\"actions\": [");
contentSb.append("{");
contentSb.append("\"tag\": \"button\",");
contentSb.append("\"text\": {");
contentSb.append("\"content\": \"view\",");
contentSb.append("\"tag\": \"plain_text\"");
contentSb.append("},");
contentSb.append("\"type\": \"primary\",");
contentSb.append("\"url\": \" "+ feishuMsgVo.getUrl() +" \"");
contentSb.append("}");
contentSb.append("],");
contentSb.append("\"tag\": \"action\"");
contentSb.append("}");
contentSb.append("],");
contentSb.append("\"header\": {");
contentSb.append("\"template\": \"green\",");
contentSb.append("\"title\": {");
contentSb.append("\"content\": \" " + feishuMsgVo.getTitle() + " \",");
contentSb.append("\"tag\": \"plain_text\"");
contentSb.append("}");
contentSb.append("}");
contentSb.append("}");
JSONObject jsonObject = JSONObject.parseObject(contentSb.toString());
String content = JSONObject.parseObject(
JSONObject.parseObject(JSONArray.parseArray(jsonObject.get("elements").toString()).get(0).toString()).get("text").toString())
.get("content").toString();
String contentEn = JSONObject.parseObject(
JSONObject.parseObject(JSONArray.parseArray(jsonObject.get("elements").toString()).get(2).toString()).get("text").toString())
.get("content").toString();
JSONObject elementTwo =
JSONObject.parseObject(JSONArray.parseArray(jsonObject.get("elements").toString()).get(1).toString());
JSONObject elementFour =
JSONObject.parseObject(JSONArray.parseArray(jsonObject.get("elements").toString()).get(3).toString());
//处理内容中的双引号(将尖括号替换成双引号)
JSONObject elementOne = getJsonObject(jsonObject, content);
JSONObject elementThree = getJsonObject(jsonObject, contentEn);
JSONArray jsonArray = new JSONArray();
jsonArray.add(elementOne);
jsonArray.add(elementTwo);
jsonArray.add(elementThree);
jsonArray.add(elementFour);
jsonObject.put("elements",jsonArray);
// 设置请求参数
JSONObject paramsMap = new JSONObject();
paramsMap.put("user_ids", userIds);
paramsMap.put("msg_type", "interactive");
paramsMap.put("card", jsonObject);
// 发送请求给飞书
String response = HttpRequestUtil.getResponseOfPOST(batchSendMessageUrl, headerMap, paramsMap.toJSONString());
// 获取返回结果
JSONObject tokenJson = JSONObject.parseObject(response);
if(!tokenJson.get("code").toString().equals("0")) {
log.error("请求出现异常:" + tokenJson.get("msg") + " " + tokenJson);
}
return tokenJson.get("msg").toString();
}
/**
* 订阅领域(飞书消息)
* @param userIds
* @param feishuMsgVo
* @return
* @throws IOException
*/
public String sendCardMsgTerritory(String[] userIds, FeishuMsgVo feishuMsgVo) throws IOException {
String token = getTenantAccessToken();
// 设置请求头
Map<String, String> headerMap = new HashMap<>();
headerMap.put("Authorization", "Bearer " + token);
headerMap.put("Content-Type", "application/json; charset=utf-8");
// 示例
StringBuilder contentSb = new StringBuilder();
contentSb.append("{");
contentSb.append("\"elements\": [");
// 内容中文
if (StrUtil.isNotEmpty(feishuMsgVo.getContent())){
contentSb.append("{");
contentSb.append("\"tag\": \"div\",");
contentSb.append("\"text\": {");
contentSb.append("\"content\": \"" + feishuMsgVo.getContent() + "\",");
contentSb.append("\"tag\": \"lark_md\"");
contentSb.append("}");
contentSb.append("},");
};
contentSb.append("{\"tag\": \"hr\"},");
//内容英文
if (StrUtil.isNotEmpty(feishuMsgVo.getContentEn())){
contentSb.append("{");
contentSb.append("\"tag\": \"div\",");
contentSb.append("\"text\": {");
contentSb.append("\"content\": \"" + feishuMsgVo.getContentEn() + "\",");
contentSb.append("\"tag\": \"lark_md\"");
contentSb.append("}");
contentSb.append("},");
};
contentSb.append("{");
contentSb.append("\"actions\": [");
contentSb.append("{");
contentSb.append("\"tag\": \"button\",");
contentSb.append("\"text\": {");
contentSb.append("\"content\": \"view\",");
contentSb.append("\"tag\": \"plain_text\"");
contentSb.append("},");
contentSb.append("\"type\": \"primary\",");
contentSb.append("\"url\": \" "+ feishuMsgVo.getUrl() +" \"");
contentSb.append("}");
contentSb.append("],");
contentSb.append("\"tag\": \"action\"");
contentSb.append("}");
contentSb.append("],");
contentSb.append("\"header\": {");
contentSb.append("\"template\": \"green\",");
contentSb.append("\"title\": {");
contentSb.append("\"content\": \" " + feishuMsgVo.getTitle() + " \",");
contentSb.append("\"tag\": \"plain_text\"");
contentSb.append("}");
contentSb.append("}");
contentSb.append("}");
JSONObject jsonObject = JSONObject.parseObject(contentSb.toString());
// 设置请求参数
JSONObject paramsMap = new JSONObject();
paramsMap.put("user_ids", userIds);
paramsMap.put("msg_type", "interactive");
paramsMap.put("card", jsonObject);
// 发送请求给飞书
String response = HttpRequestUtil.getResponseOfPOST(batchSendMessageUrl, headerMap, paramsMap.toJSONString());
// 获取返回结果
JSONObject tokenJson = JSONObject.parseObject(response);
if(!tokenJson.get("code").toString().equals("0")) {
log.error("请求出现异常:" + tokenJson.get("msg") + " " + tokenJson);
}
return tokenJson.get("msg").toString();
}
/**
* 预警推送(飞书消息)
* @param userIds
* @param feishuMsgVo
* @return
* @throws IOException
*/
public String sendCardMsgWarn(String[] userIds, FeishuMsgVo feishuMsgVo) throws IOException {
String token = getTenantAccessToken();
// 设置请求头
Map<String, String> headerMap = new HashMap<>();
headerMap.put("Authorization", "Bearer " + token);
headerMap.put("Content-Type", "application/json; charset=utf-8");
// 示例
StringBuilder contentSb = new StringBuilder();
contentSb.append("{");
contentSb.append("\"elements\": [");
// 内容中文
if (StrUtil.isNotEmpty(feishuMsgVo.getContent())){
contentSb.append("{");
contentSb.append("\"tag\": \"div\",");
contentSb.append("\"text\": {");
contentSb.append("\"content\": \"" + feishuMsgVo.getContent() + "\"\n,");
contentSb.append("\"tag\": \"lark_md\"");
contentSb.append("}");
contentSb.append("},");
};
// 编号,标题,新车型实施日期,在产车实施日期
contentSb.append("{");
contentSb.append("\"tag\": \"div\",");
contentSb.append("\"text\": {");
contentSb.append("\"content\": \"" + "编号: " + feishuMsgVo.getRegulationNo() + "\n")
.append("标题: "+feishuMsgVo.getDocumentTitleCn() + "\n")
.append("新车型实施日期: "+feishuMsgVo.getNewTypeExecutionDate()+ "\n")
.append("在产车实施日期: "+feishuMsgVo.getNewVehicleExecutionDate()+ "\",");
contentSb.append("\"tag\": \"lark_md\"");
contentSb.append("}");
contentSb.append("},");
contentSb.append("{\"tag\": \"hr\"},");
//内容英文
if (StrUtil.isNotEmpty(feishuMsgVo.getContentEn())){
contentSb.append("{");
contentSb.append("\"tag\": \"div\",");
contentSb.append("\"text\": {");
contentSb.append("\"content\": \"" + feishuMsgVo.getContentEn() + "\"\n,");
contentSb.append("\"tag\": \"lark_md\"");
contentSb.append("}");
contentSb.append("},");
};
// 编号,标题,新车型实施日期,在产车实施日期
contentSb.append("{");
contentSb.append("\"tag\": \"div\",");
contentSb.append("\"text\": {");
contentSb.append("\"content\": \"" + "Regulation No: " + feishuMsgVo.getRegulationNo() + "\n")
.append("Title: " + feishuMsgVo.getDocumentTitleEn() + "\n")
.append("New Type Execution Date: " + feishuMsgVo.getNewTypeExecutionDate() + "\n")
.append("New Vehicle Execution Date: " + feishuMsgVo.getNewVehicleExecutionDate() + "\",");
contentSb.append("\"tag\": \"lark_md\"");
contentSb.append("}");
contentSb.append("},");
contentSb.append("{");
contentSb.append("\"actions\": [");
contentSb.append("{");
contentSb.append("\"tag\": \"button\",");
contentSb.append("\"text\": {");
contentSb.append("\"content\": \"view\",");
contentSb.append("\"tag\": \"plain_text\"");
contentSb.append("},");
contentSb.append("\"type\": \"primary\",");
contentSb.append("\"url\": \" "+ feishuMsgVo.getUrl() +" \"");
contentSb.append("}");
contentSb.append("],");
contentSb.append("\"tag\": \"action\"");
contentSb.append("}");
contentSb.append("],");
contentSb.append("\"header\": {");
contentSb.append("\"template\": \"green\",");
contentSb.append("\"title\": {");
contentSb.append("\"content\": \" " + feishuMsgVo.getTitle() + " \",");
contentSb.append("\"tag\": \"plain_text\"");
contentSb.append("}");
contentSb.append("}");
contentSb.append("}");
JSONObject jsonObject = JSONObject.parseObject(contentSb.toString());
// 设置请求参数
JSONObject paramsMap = new JSONObject();
paramsMap.put("user_ids", userIds);
paramsMap.put("msg_type", "interactive");
paramsMap.put("card", jsonObject);
// 发送请求给飞书
String response = HttpRequestUtil.getResponseOfPOST(batchSendMessageUrl, headerMap, paramsMap.toJSONString());
// 获取返回结果
JSONObject tokenJson = JSONObject.parseObject(response);
if(!tokenJson.get("code").toString().equals("0")) {
log.error("请求出现异常:" + tokenJson.get("msg") + " " + tokenJson);
}
return tokenJson.get("msg").toString();
}
/**
* 虚拟清单发布(飞书消息)
* @param userIds
* @param feishuMsgVo
* @return
* @throws IOException
*/
public String sendCardMsgVirtua(String[] userIds, FeishuMsgVo feishuMsgVo,
List<String> serialNumberAddList,List<String> serialNumberDeleteList) throws IOException {
String token = getTenantAccessToken();
// 设置请求头
Map<String, String> headerMap = new HashMap<>();
headerMap.put("Authorization", "Bearer " + token);
headerMap.put("Content-Type", "application/json; charset=utf-8");
// 示例
StringBuilder contentSb = new StringBuilder();
contentSb.append("{");
contentSb.append("\"elements\": [");
// 内容中文
if (StrUtil.isNotEmpty(feishuMsgVo.getContent())){
contentSb.append("{");
contentSb.append("\"tag\": \"div\",");
contentSb.append("\"text\": {");
contentSb.append("\"content\": \"" + feishuMsgVo.getContent() + "\"\n,");
contentSb.append("\"tag\": \"lark_md\"");
contentSb.append("}");
contentSb.append("},");
};
if(ObjectUtils.isNotEmpty(serialNumberAddList)){
int count = 1;
contentSb.append("{");
contentSb.append("\"tag\": \"div\",");
contentSb.append("\"text\": {");
contentSb.append("\"content\": \"" + count + ". 新增文档: " + StringUtils.join(serialNumberAddList,",") + "\"\n,");
contentSb.append("\"tag\": \"lark_md\"");
contentSb.append("}");
contentSb.append("},");
}
if(ObjectUtils.isNotEmpty(serialNumberDeleteList)){
int count = 2;
contentSb.append("{");
contentSb.append("\"tag\": \"div\",");
contentSb.append("\"text\": {");
contentSb.append("\"content\": \"" + count + ". 删除文档: " + StringUtils.join(serialNumberDeleteList,",") + "\"\n,");
contentSb.append("\"tag\": \"lark_md\"");
contentSb.append("}");
contentSb.append("},");
}
contentSb.append("{\"tag\": \"hr\"},");
//内容英文
if (StrUtil.isNotEmpty(feishuMsgVo.getContentEn())){
contentSb.append("{");
contentSb.append("\"tag\": \"div\",");
contentSb.append("\"text\": {");
contentSb.append("\"content\": \"" + feishuMsgVo.getContentEn() + "\"\n,");
contentSb.append("\"tag\": \"lark_md\"");
contentSb.append("}");
contentSb.append("},");
};
if (ObjectUtils.isNotEmpty(serialNumberAddList)) {
int count = 1;
contentSb.append("{");
contentSb.append("\"tag\": \"div\",");
contentSb.append("\"text\": {");
contentSb.append("\"content\": \"" + count + ". New regulations: " + StringUtils.join(serialNumberAddList,",") + "\"\n,");
contentSb.append("\"tag\": \"lark_md\"");
contentSb.append("}");
contentSb.append("},");
}
if (ObjectUtils.isNotEmpty(serialNumberDeleteList)) {
int count = 2;
contentSb.append("{");
contentSb.append("\"tag\": \"div\",");
contentSb.append("\"text\": {");
contentSb.append("\"content\": \"" + count + ". Remove regulations: " + StringUtils.join(serialNumberDeleteList,",") + "\"\n,");
contentSb.append("\"tag\": \"lark_md\"");
contentSb.append("}");
contentSb.append("},");
}
contentSb.append("{");
contentSb.append("\"actions\": [");
contentSb.append("{");
contentSb.append("\"tag\": \"button\",");
contentSb.append("\"text\": {");
contentSb.append("\"content\": \"view\",");
contentSb.append("\"tag\": \"plain_text\"");
contentSb.append("},");
contentSb.append("\"type\": \"primary\",");
contentSb.append("\"url\": \" "+ feishuMsgVo.getUrl() +" \"");
contentSb.append("}");
contentSb.append("],");
contentSb.append("\"tag\": \"action\"");
contentSb.append("}");
contentSb.append("],");
contentSb.append("\"header\": {");
contentSb.append("\"template\": \"green\",");
contentSb.append("\"title\": {");
contentSb.append("\"content\": \" " + feishuMsgVo.getTitle() + " \",");
contentSb.append("\"tag\": \"plain_text\"");
contentSb.append("}");
contentSb.append("}");
contentSb.append("}");
JSONObject jsonObject = JSONObject.parseObject(contentSb.toString());
// 设置请求参数
JSONObject paramsMap = new JSONObject();
paramsMap.put("user_ids", userIds);
paramsMap.put("msg_type", "interactive");
paramsMap.put("card", jsonObject);
// 发送请求给飞书
String response = HttpRequestUtil.getResponseOfPOST(batchSendMessageUrl, headerMap, paramsMap.toJSONString());
// 获取返回结果
JSONObject tokenJson = JSONObject.parseObject(response);
if(!tokenJson.get("code").toString().equals("0")) {
log.error("请求出现异常:" + tokenJson.get("msg") + " " + tokenJson);
}
return tokenJson.get("msg").toString();
}
@NotNull
private JSONObject getJsonObject(JSONObject jsonObject, String content) {
String contentReplaceAll = content.replaceAll("<", "\"");
JSONObject jsonObject1 = JSONObject.parseObject(
JSONObject.parseObject(
JSONArray.parseArray(jsonObject.get("elements").toString()).get(0).toString())
.get("text").toString());
jsonObject1.put("content",contentReplaceAll);
JSONObject elementOne =
JSONObject.parseObject(JSONArray.parseArray(jsonObject.get("elements").toString()).get(0).toString());
elementOne.put("text",jsonObject1);
return elementOne;
}
/**
* 翻译文本
* 参数
@@ -674,4 +1127,86 @@ public class FeishuServiceImpl implements IFeishuService {
}
}
/**
* 发送消息
* @param thirdIds
* @param feishuMsgVo
*/
@Override
public void sendCard(String[] thirdIds, FeishuMsg2Vo feishuMsgVo) throws IOException {
String token = getTenantAccessToken();
// 设置请求头
Map<String, String> headerMap = new HashMap<>();
headerMap.put("Authorization", "Bearer " + token);
headerMap.put("Content-Type", "application/json; charset=utf-8");
String sendJson = "{\n" +
" \"config\": {\n" +
" \"wide_screen_mode\": true\n" +
" },\n" +
" \"elements\": [\n" +
" {\n" +
" \"tag\": \"markdown\",\n" +
" \"content\": \"" + feishuMsgVo.getCnContentUpper() + "\"\n" +
" },\n" +
" {\n" +
" \"tag\": \"markdown\",\n" +
" \"content\": \"" + feishuMsgVo.getCnContentLower() + "\"\n" +
" },\n" +
" {\n" +
" \"tag\": \"hr\"\n" +
" },\n" +
" {\n" +
" \"tag\": \"markdown\",\n" +
" \"content\": \"" + feishuMsgVo.getEnContentUpper() + "\"\n" +
" },\n" +
" {\n" +
" \"tag\": \"markdown\",\n" +
" \"content\": \"" + feishuMsgVo.getEnContentLower() + "\"\n" +
" },\n" +
" {\n" +
" \"actions\": [\n" +
" {\n" +
" \"tag\": \"button\",\n" +
" \"text\": {\n" +
" \"content\": \"View\",\n" +
" \"tag\": \"plain_text\"\n" +
" },\n" +
" \"type\": \"primary\",\n" +
" \"url\": \"" + feishuMsgVo.getUrl() + "\"\n" +
" }\n" +
" ],\n" +
" \"tag\": \"action\"\n" +
" }\n" +
" ],\n" +
" \"header\": {\n" +
" \"template\": \"" + feishuMsgVo.getColor() + "\",\n" +
" \"title\": {\n" +
" \"content\": \"" + feishuMsgVo.getTitle() + "\",\n" +
" \"tag\": \"plain_text\"\n" +
" }\n" +
" }\n" +
"}";
JSONObject jsonObject = JSONObject.parseObject(sendJson.toString());
// 设置请求参数
JSONObject paramsMap = new JSONObject();
paramsMap.put("user_ids", thirdIds);
paramsMap.put("msg_type", "interactive");
paramsMap.put("card", jsonObject);
// 发送请求给飞书
String response = HttpRequestUtil.getResponseOfPOST(batchSendMessageUrl, headerMap, paramsMap.toJSONString());
// 获取返回结果
JSONObject tokenJson = JSONObject.parseObject(response);
if (!tokenJson.get("code").toString().equals("0")) {
log.error("请求出现异常:" + tokenJson.get("msg") + " " + tokenJson);
}
}
}
@@ -0,0 +1,20 @@
package com.jero.modules.feishu.vo;
import lombok.Data;
@Data
public class FeishuMsg2Vo {
private String title; //标题
private String color; //颜色
private String enContentUpper; //英文内容上部
private String enContentLower; //英文内容下部
private String cnContentUpper; //中文内容上部
private String cnContentLower; //中文内容下部
private String url; //回调的网址
}
@@ -12,6 +12,8 @@ public class FeishuMsgVo {
private String content; //内容
private String contentEn; //内容英文
private String taskType; //任务类型
private String regulationNo; //法规编号
@@ -26,5 +28,14 @@ public class FeishuMsgVo {
private String assignee; //评估人 适用范围责任人提交通知发起人设计符合性pre-homo符合性验证符合性
private String documentTitleCn; //文档标题中文
private String documentTitleEn; //文档标题英文
private String newTypeExecutionDate; //新车型实施日期
private String newVehicleExecutionDate; //在产车实施日期
}
@@ -2,6 +2,7 @@ package com.jero.modules.lawsOpinionGather.job;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jero.common.exception.JeroBootException;
import com.jero.modules.lawsOpinionGather.entity.LawsOpinionGatherEO;
import com.jero.modules.lawsOpinionGather.enums.GatherResultEnum;
import com.jero.modules.lawsOpinionGather.service.ILawsOpinionGatherEOService;
@@ -41,18 +42,45 @@ public class LawsOpinionGatherRemindJob implements Job {
if(CollectionUtils.isNotEmpty(lawsOpinionGatherEOList)){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date currentDate = new Date();
//Date currentDate = new Date();
String now = sdf.format(new Date());
//获取后一天的时间
Calendar calendar=new GregorianCalendar();
calendar.setTime(new Date());
calendar.add(Calendar.DATE,1);
Date nextDay = calendar.getTime();
//Calendar calendar=new GregorianCalendar();
//calendar.setTime(new Date());
//calendar.add(Calendar.DATE,1);
//Date nextDay = calendar.getTime();
String nextDayStr = sdf.format(nextDay);
//String nextDayStr = sdf.format(nextDay);
lawsOpinionGatherEOList.forEach(lawsOpinionGatherEO -> {
if(StringUtils.equals(nextDayStr,sdf.format(lawsOpinionGatherEO.getEndTime()))){
String endTime = sdf.format(lawsOpinionGatherEO.getEndTime());
int days = 0;
try {
days = (int) (sdf.parse(endTime).getTime() - sdf.parse(now).getTime()) / (24 * 60 * 60 * 1000);
} catch (Exception e) {
e.printStackTrace();
throw new JeroBootException("日期转换错误");
}
if (days == 3) {
List<String> userIdList = this.workFlowFeignClient.getLawsOpinionGatherFlowAssigneeList(lawsOpinionGatherEO.getId());
if(CollectionUtils.isNotEmpty(userIdList)){
JSONObject sendJsonObject = new JSONObject();
sendJsonObject.put("msgType", MsgTypeEnum.LAWS_OPOMOPM_GATHER_ENALUATOR_EXPIRE_REMIND_THREE_DAYS_BEFORE_MSG.getValue());
sendJsonObject.put("lawsOpinionGatherId",lawsOpinionGatherEO.getId());
sendJsonObject.put("userIdList",userIdList);
this.lawsOpinionGatherEOService.workFlowSendMsg(sendJsonObject);
}
} else if (endTime.equals(now)) {
List<String> userIdList = this.workFlowFeignClient.getLawsOpinionGatherFlowAssigneeList(lawsOpinionGatherEO.getId());
if(CollectionUtils.isNotEmpty(userIdList)){
JSONObject sendJsonObject = new JSONObject();
sendJsonObject.put("msgType", MsgTypeEnum.LAWS_OPOMOPM_GATHER_ENALUATOR_EXPIRE_REMIND_TODAY_MSG.getValue());
sendJsonObject.put("lawsOpinionGatherId",lawsOpinionGatherEO.getId());
sendJsonObject.put("userIdList",userIdList);
this.lawsOpinionGatherEOService.workFlowSendMsg(sendJsonObject);
}
}
/*if(StringUtils.equals(nextDayStr,sdf.format(lawsOpinionGatherEO.getEndTime()))){
List<String> userIdList = this.workFlowFeignClient.getLawsOpinionGatherFlowAssigneeList(lawsOpinionGatherEO.getId());
if(CollectionUtils.isNotEmpty(userIdList)){
JSONObject sendJsonObject = new JSONObject();
@@ -62,7 +90,7 @@ public class LawsOpinionGatherRemindJob implements Job {
sendJsonObject.put("userIdList",userIdList);
this.lawsOpinionGatherEOService.workFlowSendMsg(sendJsonObject);
}
}
}*/
});
}
@@ -191,14 +191,23 @@ public class LawsOpinionAssessmentResultEOServiceImpl extends ServiceImpl<LawsOp
this.disposeData(exportData,lawsOpinionAssessmentResultEO,cut);
String lawsOpinionGatherId = (String)params.get("lawsOpinionGatherId");
if(StringUtils.isEmpty(lawsOpinionGatherId)){
if(StringUtils.equals(cut,CutEnum.CN.getValue())){
throw new JeroBootException("法规意见收集id为空,请检查!");
}else if(StringUtils.equals(cut,CutEnum.EN.getValue())){
throw new JeroBootException("The lawsOpinionGatherId is empty, please check!");
}
}
LawsOpinionGatherEO lawsOpinionGatherEO = this.lawsOpinionGatherEOService.queryById(lawsOpinionGatherId);
String title = "";
String fileName = "";
if(StringUtils.equals(cut, CutEnum.CN.getValue())){
title = "相关章节,问题/建议,理由,条款内容,附件,评估人,提出时间";
fileName = "评估结果" + ".xls";
fileName = lawsOpinionGatherEO.getSerialNumber() + " 评估结果" + ".xls";
}else if(StringUtils.equals(cut,CutEnum.EN.getValue())){
title = "Related section,IssueOrSuggest,Reason,Item Content,Accessory,Evaluator,Submit Date";
fileName = "Evaluation results" + ".xls";
fileName = lawsOpinionGatherEO.getSerialNumber() + " Evaluation results" + ".xls";
}
OutputStream os = null;
@@ -2,11 +2,16 @@ package com.jero.modules.lawsOpinionGather.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.jero.common.api.vo.Result;
import com.jero.common.constant.enums.CutEnum;
import com.jero.common.constant.enums.MessageType2Enum;
import com.jero.common.constant.enums.MessageTypeEnum;
import com.jero.common.constant.enums.MsgColorEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.vo.LoginUser;
import com.jero.modules.feishu.service.IFeishuService;
import com.jero.modules.feishu.vo.FeishuMsg2Vo;
import com.jero.modules.feishu.vo.FeishuMsgVo;
import com.jero.modules.lawsOpinionGather.entity.LawsOpinionGatherEO;
import com.jero.modules.lawsOpinionGather.enums.GatherResultEnum;
@@ -29,8 +34,13 @@ import com.jero.modules.system.entity.SysCategory;
import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.service.ISysUserService;
import com.jero.modules.system.service.impl.SysCategoryServiceImpl;
import com.jero.modules.todoCenter.entity.ProcessInfoEO;
import com.jero.modules.todoCenter.enums.TodoCenterStatusEnum;
import com.jero.modules.todoCenter.service.IProcessInfoEOService;
import com.jero.modules.wkflow.enums.FlowTypeEnum;
import com.jero.modules.wkflow.feginClient.WorkFlowFeignClient;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.jeecg.modules.jmreport.common.constant.CommonConstant;
@@ -38,6 +48,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@@ -70,6 +81,10 @@ public class LawsOpinionGatherEOServiceImpl extends ServiceImpl<LawsOpinionGathe
private ILawsOpinionAssessmentResultEOService lawsOpinionAssessmentResultEOService;
@Autowired
private WorkFlowFeignClient workFlowFeignClient;
@Autowired
private IProcessInfoEOService processInfoEOService;
@Autowired
private IFeishuService feishuService;
/**
* 保存
@@ -129,6 +144,8 @@ public class LawsOpinionGatherEOServiceImpl extends ServiceImpl<LawsOpinionGathe
QueryWrapper deleteWrapper = new QueryWrapper();
deleteWrapper.in("laws_opinion_gather_id",ids);
this.lawsOpinionAssessmentResultEOService.remove(deleteWrapper);
this.processInfoEOService.deleteByIds(actiProcInstIdList);
}else {
if(StringUtils.equals(cut,CutEnum.CN.getValue())){
throw new JeroBootException("删除失败,请联系管理员!");
@@ -187,6 +204,13 @@ public class LawsOpinionGatherEOServiceImpl extends ServiceImpl<LawsOpinionGathe
lawsOpinionGatherEO.setId(jsonObject.getString("id"));
lawsOpinionGatherEO.setGatherResult(jsonObject.getString("gatherResult"));
this.baseMapper.updateById(lawsOpinionGatherEO);
//飞书
JSONObject sendMsgJson = new JSONObject();
sendMsgJson.put("lawsOpinionGatherId",jsonObject.getString("id"));
sendMsgJson.put("initiatorUserId",jsonObject.getString("initiatorUserId"));
sendMsgJson.put("msgType", MsgTypeEnum.LAWS_OPOMOPM_GATHER_COMPLETE_MSG.getValue());
workFlowSendMsg(sendMsgJson);
}
// 发送消息
@@ -264,51 +288,143 @@ public class LawsOpinionGatherEOServiceImpl extends ServiceImpl<LawsOpinionGathe
}
String lawsOpinionGatherId = jsonObject.getString("lawsOpinionGatherId");
String serialNumber = jsonObject.getString("serialNumber"); //文档库编号
//String serialNumber = jsonObject.getString("serialNumber"); //文档库编号
List<String> userIdList = new ArrayList<>();
String msgContentEN = "";
String msgTitle = "";
//String msgContentEN = "";
//String msgTitle = "";
LawsOpinionGatherEO lawsOpinionGatherEO = queryById(lawsOpinionGatherId);
Map<String, String> lawsOpinionGatherPrcInfo = this.workFlowFeignClient.getLawsOpinionGatherPrcInfo(lawsOpinionGatherId);
String initiator = "";
String title = MessageType2Enum.REGULATION_OPINION_COLLECTION.getCn() + "/" + MessageType2Enum.REGULATION_OPINION_COLLECTION.getEn();
String endTime = new SimpleDateFormat("yyyy-MM-dd").format(lawsOpinionGatherEO.getEndTime());//截止日期
String prcNum = lawsOpinionGatherPrcInfo.get("prcNum");
String prcName = lawsOpinionGatherPrcInfo.get("prcName");
String cnContentUpper = "";
String cnContentLower = "";
String enContentUpper = "";
String enContentLower = "";
if(StringUtils.equals(msgType,MsgTypeEnum.LAWS_OPOMOPM_GATHER_START_MSG.getValue())){
userIdList.addAll(Arrays.asList(jsonObject.getString("evaluatorIds").split(",")));
String endTime = jsonObject.getString("endTime"); //截止日期
msgContentEN = "You recieved the Collection of Legislative Comments of "+serialNumber+" . The due date is "+endTime+". Please check and address it in a timely manner.";
msgTitle = "You have a Collection of Legislative Comments task to complete";
//msgContentEN = "You recieved the Collection of Legislative Comments of "+serialNumber+" . The due date is "+endTime+". Please check and address it in a timely manner.";
//msgTitle = "You have a Collection of Legislative Comments task to complete";
String currentUserId = jsonObject.getString("currentUserId"); //当前操作用户id
SysUser currentUser = sysUserService.getBaseMapper().selectOne(new QueryWrapper<SysUser>().lambda().eq(SysUser::getId, currentUserId));
initiator = currentUser.getUsername();
cnContentUpper = "您好,请及时查看处理此项任务,谢谢!";
cnContentLower = "编号: " + prcNum +
"\n标题: " + prcName +
"\n发起人: " + initiator +
"\n截止时间: " + endTime;
enContentUpper = "Hello! Please check and address the task in a timely manner. Thank you!";
enContentLower = "Regulation No: " + prcNum +
"\nTitle: " + prcName +
"\nInitiator: " + initiator +
"\nDue Date: " + endTime;
}else if(StringUtils.equals(msgType,MsgTypeEnum.LAWS_OPOMOPM_GATHER_ENALUATOR_SUBMIT_MSG.getValue())){
String currentUserId = jsonObject.getString("currentUserId"); //当前操作用户id
SysUser currentUser = sysUserService.getBaseMapper().selectOne(new QueryWrapper<SysUser>().lambda().eq(SysUser::getId, currentUserId));
userIdList.add(jsonObject.getString("initiatorUserId"));
msgContentEN = currentUser.getUsername() + " has submitted the collection process of Collection of Legislative Comments of "+serialNumber+", please check it in time.";
msgTitle = "You have a Collection of Legislative Comments task completed";
//msgContentEN = currentUser.getUsername() + " has submitted the collection process of Collection of Legislative Comments of "+serialNumber+", please check it in time.";
//msgTitle = "You have a Collection of Legislative Comments task completed";
initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName();
}else if(StringUtils.equals(msgType, MsgTypeEnum.LAWS_OPOMOPM_GATHER_ENALUATOR_EXPIRE_REMIND_MSG.getValue())){
cnContentUpper = "您好,"+ currentUser.getUsername() +"已提交反馈意见,请查看";
cnContentLower = "编号: " + prcNum +
"\n标题: " + prcName +
"\n发起人: " + initiator +
"\n截止时间: " + endTime;
enContentUpper = "Hello! "+ currentUser.getUsername() +" has submitted the comments. Please check it";
enContentLower = "Regulation No: " + lawsOpinionGatherPrcInfo.get("prcNum") +
"\nTitle: " + lawsOpinionGatherPrcInfo.get("prcName") +
"\nInitiator: " + initiator +
"\nDue Date: " + endTime;
} else if (StringUtils.equals(msgType, MsgTypeEnum.LAWS_OPOMOPM_GATHER_ENALUATOR_EXPIRE_REMIND_THREE_DAYS_BEFORE_MSG.getValue())) {
userIdList = (List<String>) jsonObject.get("userIdList");
msgContentEN = "The the Collection of Legislative Comments of "+serialNumber+" will expire tomorrow . Please check and address it in time.";
msgTitle = "You have a Collection of Legislative Comments task to complete";
initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName();
cnContentUpper = "您好,该任务将于3天后到期,请及时查看处理,谢谢!";
cnContentLower = "编号: " + prcNum +
"\n标题: " + prcName +
"\n发起人: " + initiator +
"\n截止时间: " + endTime;
enContentUpper = "Hello! This task will expire in 3 days. Please check and address the task in a timely manner. Thank you!";
enContentLower = "Regulation No: " + lawsOpinionGatherPrcInfo.get("prcNum") +
"\nTitle: " + lawsOpinionGatherPrcInfo.get("prcName") +
"\nInitiator: " + initiator +
"\nDue Date: " + endTime;
} else if (StringUtils.equals(msgType, MsgTypeEnum.LAWS_OPOMOPM_GATHER_ENALUATOR_EXPIRE_REMIND_TODAY_MSG.getValue())){
userIdList = (List<String>) jsonObject.get("userIdList");
initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName();
cnContentUpper = "您好,该任务将于今天到期,请尽快查看处理,谢谢!";
cnContentLower = "编号: " + prcNum +
"\n标题: " + prcName +
"\n发起人: " + initiator;
enContentUpper = "Hello! This task will expire today. Please check and address the task ASAP. Thank you!";
enContentLower = "Regulation No: " + lawsOpinionGatherPrcInfo.get("prcNum") +
"\nTitle: " + lawsOpinionGatherPrcInfo.get("prcName") +
"\nInitiator: " + initiator;
} else if (StringUtils.equals(msgType, MsgTypeEnum.LAWS_OPOMOPM_GATHER_COMPLETE_MSG.getValue())) {
userIdList.add((String) jsonObject.get("initiatorUserId"));
initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName();
cnContentUpper = "您好,该任务已完成,请查看";
cnContentLower = "编号: " + prcNum +
"\n标题: " + prcName +
"\n发起人: " + initiator;
enContentUpper = "Hello! The task is completed. Please check it.";
enContentLower = "Regulation No: " + lawsOpinionGatherPrcInfo.get("prcNum") +
"\nTitle: " + lawsOpinionGatherPrcInfo.get("prcName") +
"\nInitiator: " + initiator;
}
/*else if(StringUtils.equals(msgType, MsgTypeEnum.LAWS_OPOMOPM_GATHER_ENALUATOR_EXPIRE_REMIND_MSG.getValue())){
userIdList = (List<String>) jsonObject.get("userIdList");
//msgContentEN = "The the Collection of Legislative Comments of "+serialNumber+" will expire tomorrow . Please check and address it in time.";
//msgTitle = "You have a Collection of Legislative Comments task to complete";
initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName();
}
}*/
List<String> thirdIdList = new ArrayList<>();
List<SysUser> sysUsers = sysUserService.listByIds(userIdList);
if (ObjectUtils.isNotEmpty(sysUsers)) {
thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList());
}
//飞书跳转链接
String hrefFeishu = backUrl + JumpLinkEnum.TASK_AFFIRM_LINK.getLink();
try {
FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo();
feishuMsgVo.setTitle(title);
feishuMsgVo.setCnContentUpper(cnContentUpper);
feishuMsgVo.setCnContentLower(cnContentLower);
feishuMsgVo.setEnContentUpper(enContentUpper);
feishuMsgVo.setEnContentLower(enContentLower);
feishuMsgVo.setUrl(hrefFeishu);
feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色
feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo);
} catch (IOException e) {
log.error("飞书消息推送失败");
}
//系统内部跳转链接
String href = "<a href='" + JumpLinkEnum.TASK_AFFIRM_LINK.getLink() + "'>" + " View details" + "</a>";
String contentInfo = msgContentEN + " " + href;
//String href = "<a href='" + JumpLinkEnum.TASK_AFFIRM_LINK.getLink() + "'>" + " View details" + "</a>";
//String contentInfo = msgContentEN + " " + href;
Map<String,Object> sendMessageMap = new HashMap<>();
sendMessageMap.put("hrefFeishu",hrefFeishu);
sendMessageMap.put("contentInfo",contentInfo);
//Map<String,Object> sendMessageMap = new HashMap<>();
//sendMessageMap.put("hrefFeishu",hrefFeishu);
//sendMessageMap.put("contentInfo",contentInfo);
SendMessageUtils.sendMessage(msgTitle,msgContentEN,userIdList,lawsOpinionGatherId,sendMessageMap,null,MessageTypeEnum.COLLECTION_OF_LEGISLATIVE_COMMENTS,initiator);
//SendMessageUtils.sendMessage(msgTitle,msgContentEN,userIdList,lawsOpinionGatherId,sendMessageMap,null,MessageTypeEnum.COLLECTION_OF_LEGISLATIVE_COMMENTS,initiator);
}
@Override
@@ -338,6 +454,12 @@ public class LawsOpinionGatherEOServiceImpl extends ServiceImpl<LawsOpinionGathe
lawsOpinionGatherEO.setGatherResult(GatherResultEnum.COMPLETED.getValue());
});
this.updateBatchById(lawsOpinionGatherEOList);
LambdaUpdateWrapper<ProcessInfoEO> processInfoUpdateWrap = new LambdaUpdateWrapper<>();
processInfoUpdateWrap.set(ProcessInfoEO::getStatus, TodoCenterStatusEnum.COMPLETED.getValue());
processInfoUpdateWrap.in(ProcessInfoEO::getId,actiProcInstIdList);
processInfoUpdateWrap.eq(ProcessInfoEO::getFlowType, FlowTypeEnum.FGYJSJLC.getValue());
this.processInfoEOService.update(processInfoUpdateWrap);
}
}
return new Result<>().success("手动结束成功!");
@@ -2,6 +2,7 @@ package com.jero.modules.lawsTechnologyEvaluation.job;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jero.common.exception.JeroBootException;
import com.jero.modules.lawsOpinionGather.enums.GatherResultEnum;
import com.jero.modules.lawsTechnologyEvaluation.entity.LawsTechnologyEvaluationEO;
import com.jero.modules.lawsTechnologyEvaluation.entity.LawsTechnologyEvaluationFlowDetailEO;
@@ -52,14 +53,16 @@ public class LawsTechnologyEvaluationRemindJob implements Job {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//获取后一天的时间
Calendar calendar=new GregorianCalendar();
calendar.setTime(new Date());
calendar.add(Calendar.DATE,1);
Date nextDay = calendar.getTime();
//Calendar calendar=new GregorianCalendar();
//calendar.setTime(new Date());
//calendar.add(Calendar.DATE,1);
//Date nextDay = calendar.getTime();
String nextDayStr = sdf.format(nextDay);
//String nextDayStr = sdf.format(nextDay);
String now = sdf.format(new Date());
LawsTechnologyEvaluationEOList.forEach(lawsTechnologyEvaluationEO -> {
if(StringUtils.equals(nextDayStr,sdf.format(lawsTechnologyEvaluationEO.getEndTime()))){
/*if(StringUtils.equals(nextDayStr,sdf.format(lawsTechnologyEvaluationEO.getEndTime()))){
String actiProcInstIds = flowDetailList.stream().filter(flowDetail -> {
boolean flag = false;
@@ -80,6 +83,56 @@ public class LawsTechnologyEvaluationRemindJob implements Job {
this.lawsTechnologyEvaluationEOService.workFlowSendMsg(sendJsonObject);
}
}
}*/
String endTime = sdf.format(lawsTechnologyEvaluationEO.getEndTime());
int days = 0;
try {
days = (int) (sdf.parse(endTime).getTime() - sdf.parse(now).getTime()) / (24 * 60 * 60 * 1000);
} catch (Exception e) {
e.printStackTrace();
throw new JeroBootException("日期转换错误");
}
if (days == 3) {
//到期前3天
String actiProcInstIds = flowDetailList.stream().filter(flowDetail -> {
boolean flag = false;
if (StringUtils.equals(lawsTechnologyEvaluationEO.getId(), flowDetail.getLawsTechnologyEvaluationId())) {
flag = true;
}
return flag;
}).map(LawsTechnologyEvaluationFlowDetailEO::getActiProcInstId).distinct().collect(Collectors.joining(","));
if(StringUtils.isNotEmpty(actiProcInstIds)){
List<String> userIdList = this.workFlowFeignClient.getTaskAssigneeListByPrcIds(actiProcInstIds);
if(CollectionUtils.isNotEmpty(userIdList)){
JSONObject sendJsonObject = new JSONObject();
sendJsonObject.put("msgType", MsgTypeEnum.LAWS_TECHNOLOGY_EVALUATION_EXPIRE_REMIND_THREE_DAYS_BEFORE_MSG.getValue());
sendJsonObject.put("lawsTechnologyEvaluationId",lawsTechnologyEvaluationEO.getId());
sendJsonObject.put("userIdList",userIdList);
this.lawsTechnologyEvaluationEOService.workFlowSendMsg(sendJsonObject);
}
}
} else if (endTime.equals(now)){
//当天
String actiProcInstIds = flowDetailList.stream().filter(flowDetail -> {
boolean flag = false;
if (StringUtils.equals(lawsTechnologyEvaluationEO.getId(), flowDetail.getLawsTechnologyEvaluationId())) {
flag = true;
}
return flag;
}).map(LawsTechnologyEvaluationFlowDetailEO::getActiProcInstId).distinct().collect(Collectors.joining(","));
if(StringUtils.isNotEmpty(actiProcInstIds)){
List<String> userIdList = this.workFlowFeignClient.getTaskAssigneeListByPrcIds(actiProcInstIds);
if(CollectionUtils.isNotEmpty(userIdList)){
JSONObject sendJsonObject = new JSONObject();
sendJsonObject.put("msgType", MsgTypeEnum.LAWS_TECHNOLOGY_EVALUATION_EXPIRE_REMIND_TODAY_MSG.getValue());
sendJsonObject.put("lawsTechnologyEvaluationId",lawsTechnologyEvaluationEO.getId());
sendJsonObject.put("userIdList",userIdList);
this.lawsTechnologyEvaluationEOService.workFlowSendMsg(sendJsonObject);
}
}
}
});
}
@@ -14,4 +14,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface LawsTechnologyEvaluationFlowDetailEOMapper extends BaseMapper<LawsTechnologyEvaluationFlowDetailEO> {
LawsTechnologyEvaluationFlowDetailEO queryByEvaluationId(@Param("lawsTechnologyEvaluationId") String lawsTechnologyEvaluationId);
}
@@ -14,4 +14,11 @@
<result column="prc_name" property="prcName" />
<result column="evaluator_id" property="evaluatorId" />
</resultMap>
</mapper>
<select id="queryByEvaluationId" resultMap="LawsTechnologyEvaluationFlowDetailEOResultMap">
select * from laws_technology_evaluation_flow_detail where laws_technology_evaluation_id = #{lawsTechnologyEvaluationId}
</select>
</mapper>
@@ -11,11 +11,13 @@ import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.FileUtils;
import com.jero.common.util.oss.CosBootUtil;
import com.jero.modules.lawsTechnologyEvaluation.entity.LawsTechnologyEvaluationComplianceResultEO;
import com.jero.modules.lawsTechnologyEvaluation.entity.LawsTechnologyEvaluationEO;
import com.jero.modules.lawsTechnologyEvaluation.entity.LawsTechnologyEvaluationFlowDetailEO;
import com.jero.modules.lawsTechnologyEvaluation.entity.LawsTechnologyEvaluationResultEO;
import com.jero.modules.lawsTechnologyEvaluation.enums.ComplianceResultEnum;
import com.jero.modules.lawsTechnologyEvaluation.mapper.LawsTechnologyEvaluationComplianceResultEOMapper;
import com.jero.modules.lawsTechnologyEvaluation.service.ILawsTechnologyEvaluationComplianceResultEOService;
import com.jero.modules.lawsTechnologyEvaluation.service.ILawsTechnologyEvaluationEOService;
import com.jero.modules.lawsTechnologyEvaluation.service.ILawsTechnologyEvaluationFlowDetailEOService;
import com.jero.modules.lawsTechnologyEvaluation.service.ILawsTechnologyEvaluationResultEOService;
import com.jero.modules.oss.entity.OSSFile;
@@ -64,6 +66,8 @@ public class LawsTechnologyEvaluationComplianceResultEOServiceImpl extends Servi
private ILawsTechnologyEvaluationFlowDetailEOService lawsTechnologyEvaluationFlowDetailEOService;
@Autowired
private ISysUserService sysUserService;
@Autowired
private ILawsTechnologyEvaluationEOService lawsTechnologyEvaluationEOService;
/**
* 保存
@@ -173,6 +177,15 @@ public class LawsTechnologyEvaluationComplianceResultEOServiceImpl extends Servi
Map<String, Object> params) {
String ids = (String)params.get("ids");
String cut = (String)params.get("cut");
String lawsTechnologyEvaluationId = (String)params.get("lawsTechnologyEvaluationId");
if(StringUtils.isEmpty(lawsTechnologyEvaluationId)){
if(StringUtils.equals(cut,CutEnum.CN.getValue())){
throw new JeroBootException("法规技术评估id为空,请检查!");
}else if(StringUtils.equals(cut,CutEnum.EN.getValue())){
throw new JeroBootException("The lawsTechnologyEvaluationId is empty, please check!");
}
}
LawsTechnologyEvaluationEO lawsTechnologyEvaluationEO = this.lawsTechnologyEvaluationEOService.queryById(lawsTechnologyEvaluationId);
if(!StringUtils.isEmpty(ids)){
lawsTechnologyEvaluationComplianceResultEO.setIds(ids);
@@ -187,12 +200,12 @@ public class LawsTechnologyEvaluationComplianceResultEOServiceImpl extends Servi
if(org.apache.commons.lang3.StringUtils.equals(cut, CutEnum.CN.getValue())){
title = "相关章节,问题说明,附件";
bottomTitle = "符合性结果:";
fileName = "评估结果" + ".xls";
fileName = lawsTechnologyEvaluationEO.getSerialNumber() + " 评估结果" + ".xls";
sheetName = "反馈结果";
}else if(org.apache.commons.lang3.StringUtils.equals(cut,CutEnum.EN.getValue())){
title = "Related section,Problem description,Accessory";
bottomTitle = "Compliance results:";
fileName = "Evaluation results" + ".xls";
fileName = lawsTechnologyEvaluationEO.getSerialNumber() + " Evaluation results" + ".xls";
sheetName = "Feedback result";
}
@@ -2,12 +2,11 @@ package com.jero.modules.lawsTechnologyEvaluation.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.common.api.vo.Result;
import com.jero.common.constant.enums.CutEnum;
import com.jero.common.constant.enums.MessageTypeEnum;
import com.jero.common.constant.enums.ModuleEnum;
import com.jero.common.constant.enums.*;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.vo.LoginUser;
import com.jero.generater.modules.online.cgform.entity.OnlCgformField;
@@ -15,10 +14,13 @@ import com.jero.generater.modules.online.cgform.service.impl.OnlCgformFieldServi
import com.jero.modules.document.enums.FieldTypeEnum;
import com.jero.modules.document.mapper.BussDocumentLibraryEOMapper;
import com.jero.modules.document.service.impl.BussDocumentLibraryEOServiceImpl;
import com.jero.modules.feishu.service.IFeishuService;
import com.jero.modules.feishu.vo.FeishuMsg2Vo;
import com.jero.modules.lawsOpinionGather.enums.GatherResultEnum;
import com.jero.modules.lawsTechnologyEvaluation.entity.LawsTechnologyEvaluationEO;
import com.jero.modules.lawsTechnologyEvaluation.entity.LawsTechnologyEvaluationFlowDetailEO;
import com.jero.modules.lawsTechnologyEvaluation.mapper.LawsTechnologyEvaluationEOMapper;
import com.jero.modules.lawsTechnologyEvaluation.mapper.LawsTechnologyEvaluationFlowDetailEOMapper;
import com.jero.modules.lawsTechnologyEvaluation.service.*;
import com.jero.modules.project.enums.JumpLinkEnum;
import com.jero.modules.project.enums.MsgTypeEnum;
@@ -33,9 +35,14 @@ import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.service.ISysUserService;
import com.jero.modules.system.service.impl.SysCategoryServiceImpl;
import com.jero.modules.system.service.impl.SysDictItemServiceImpl;
import com.jero.modules.todoCenter.entity.ProcessInfoEO;
import com.jero.modules.todoCenter.enums.TodoCenterStatusEnum;
import com.jero.modules.todoCenter.service.IProcessInfoEOService;
import com.jero.modules.wkflow.enums.FlowTypeEnum;
import com.jero.modules.wkflow.feginClient.WorkFlowFeignClient;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
@@ -47,7 +54,9 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@@ -97,6 +106,13 @@ public class LawsTechnologyEvaluationEOServiceImpl extends ServiceImpl<LawsTechn
private ILawsTechnologyEvaluationComplianceResultEOService lawsTechnologyEvaluationComplianceResultEOService;
@Autowired
private WorkFlowFeignClient workFlowFeignClient;
@Autowired
private IProcessInfoEOService processInfoEOService;
@Autowired
private IFeishuService feishuService;
@Autowired
private LawsTechnologyEvaluationFlowDetailEOMapper flowDetailEOMapper;
/**
* 保存
@@ -156,7 +172,8 @@ public class LawsTechnologyEvaluationEOServiceImpl extends ServiceImpl<LawsTechn
List<LawsTechnologyEvaluationFlowDetailEO> lawsTechnologyEvaluationFlowDetailEOList = lawsTechnologyEvaluationFlowDetailEOService.list(flowDetailEOQueryWrapper);
if(CollectionUtils.isNotEmpty(lawsTechnologyEvaluationFlowDetailEOList)){
String prcIds = lawsTechnologyEvaluationFlowDetailEOList.stream().map(LawsTechnologyEvaluationFlowDetailEO::getActiProcInstId).distinct().collect(Collectors.joining(","));
List<String> actiProcInstIdList = lawsTechnologyEvaluationFlowDetailEOList.stream().map(LawsTechnologyEvaluationFlowDetailEO::getActiProcInstId).distinct().collect(Collectors.toList());
String prcIds = actiProcInstIdList.stream().collect(Collectors.joining(","));
Result<String> result = this.workFlowFeignClient.deleteProcessInstanceByPrcIds(prcIds);
if(result.getCode().equals(CommonConstant.SC_OK_200)){
removeByIds(ids);
@@ -170,6 +187,8 @@ public class LawsTechnologyEvaluationEOServiceImpl extends ServiceImpl<LawsTechn
this.lawsTechnologyEvaluationResultEOService.remove(deleteWrapper);
this.lawsTechnologyEvaluationComplianceResultEOService.remove(deleteWrapper);
this.processInfoEOService.deleteByIds(actiProcInstIdList);
}else {
if(StringUtils.equals(cut,CutEnum.CN.getValue())){
throw new JeroBootException("删除失败,请联系管理员!");
@@ -599,69 +618,163 @@ public class LawsTechnologyEvaluationEOServiceImpl extends ServiceImpl<LawsTechn
throw new JeroBootException("发送消息类型不能为空,请检查!");
}
String lawsTechnologyEvaluationId = jsonObject.getString("lawsTechnologyEvaluationId");
String serialNumber = jsonObject.getString("serialNumber"); //文档库编号
//String lawsTechnologyEvaluationId = jsonObject.getString("lawsTechnologyEvaluationId");
//String serialNumber = jsonObject.getString("serialNumber"); //文档库编号
List<String> userIdList = new ArrayList<>();
String msgContentEN = "";
String msgTitle = "";
//String msgContentEN = "";
//String msgTitle = "";
String initiator = "";
String lawsTechnologyEvaluationId = jsonObject.getString("lawsTechnologyEvaluationId");
LawsTechnologyEvaluationEO lawsTechnologyEvaluationEO = queryById(lawsTechnologyEvaluationId);
LawsTechnologyEvaluationFlowDetailEO flowDetailEO = flowDetailEOMapper.queryByEvaluationId(lawsTechnologyEvaluationId);
String number = flowDetailEO.getPrcNum();
String name = flowDetailEO.getPrcName();
String endTime = new SimpleDateFormat("yyyy-MM-dd").format(lawsTechnologyEvaluationEO.getEndTime());
String title = MessageType2Enum.REGULATION_TECHNICAL_ASSESSMENT.getCn() + "/" + MessageType2Enum.REGULATION_TECHNICAL_ASSESSMENT.getEn();
String cnContentUpper = "";
String cnContentLower = "";
String enContentUpper = "";
String enContentLower = "";
if(StringUtils.equals(msgType, MsgTypeEnum.LAWS_TECHNOLOGY_EVALUATION_START_MSG.getValue())){
userIdList.add(jsonObject.getString("evaluationId"));
String endTime = jsonObject.getString("endTime"); //截止日期
//String endTime = jsonObject.getString("endTime"); //截止日期
//您收到GB 7258 的法规技术评估流程任务请及时查看处理
msgContentEN = "You recieved the Regulatory and technical assessment of "+serialNumber+" . The due date is "+endTime+". Please check and address it in a timely manner.";
msgTitle = "You have a Regulatory and technical assessment task to complete";
//msgContentEN = "You recieved the Regulatory and technical assessment of "+serialNumber+" . The due date is "+endTime+". Please check and address it in a timely manner.";
//msgTitle = "You have a Regulatory and technical assessment task to complete";
String currentUserId = jsonObject.getString("currentUserId"); //当前操作用户id
SysUser currentUser = sysUserService.getBaseMapper().selectOne(new QueryWrapper<SysUser>().lambda().eq(SysUser::getId, currentUserId));
initiator = currentUser.getUsername();
cnContentUpper = "您好,请及时查看处理此项任务,谢谢!";
cnContentLower = "编号:" + number +
"\n标题: " + name +
"\n发起人: " + initiator +
"\n截止时间: " + endTime;
enContentUpper = "Hello! Please check and address the task in a timely manner. Thank you!";
enContentLower = "Regulation No :" + number +
"\nTitle: " + name +
"\nInitiator: " + initiator +
"\nDue Date: " + endTime;
}else if(StringUtils.equals(msgType,MsgTypeEnum.LAWS_TECHNOLOGY_EVALUATION_ENALUATOR_SUBMIT_MSG.getValue())){
String currentUserId = jsonObject.getString("currentUserId"); //当前操作用户id
SysUser currentUser = this.sysUserService.getBaseMapper().selectOne(new QueryWrapper<SysUser>().lambda().eq(SysUser::getId, currentUserId));
userIdList.add(jsonObject.getString("initiatorUserId"));
//XXX人员账号已提交GB 7258 的法规意见收集流程请及时查看审核
msgContentEN = currentUser.getUsername() + " has submitted the collection process of Regulatory and technical assessment of "+serialNumber+", Please check and address it in time.";
msgTitle = "You have a Regulatory and technical assessment task to complete";
//msgContentEN = currentUser.getUsername() + " has submitted the collection process of Regulatory and technical assessment of "+serialNumber+", Please check and address it in time.";
//msgTitle = "You have a Regulatory and technical assessment task to complete";
initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName();
cnContentUpper = "您好,"+ currentUser.getUsername() +"已提交评估结果,请审核";
cnContentLower = "编号:" + number +
"\n标题: " + name +
"\n发起人: " + initiator +
"\n截止时间: " + endTime;
enContentUpper = "Hello! "+ currentUser.getUsername() +" has submitted the assessment result. Please review it";
enContentLower = "Regulation No :" + number +
"\nTitle: " + name +
"\nInitiator: " + initiator +
"\nDue Date: " + endTime;
}else if(StringUtils.equals(msgType, MsgTypeEnum.LAWS_TECHNOLOGY_EVALUATION_AUDIT_ACCEPTED_MSG.getValue())){
userIdList.add(jsonObject.getString("evaluationId"));
//您提交的GB 7258 的法规技术评估流程已通过
msgContentEN = "The regulatory and technical assessment process for "+serialNumber+" you submitted has passed.";
msgTitle = "You have a Regulatory and technical assessment task completed";
//msgContentEN = "The regulatory and technical assessment process for "+serialNumber+" you submitted has passed.";
//msgTitle = "You have a Regulatory and technical assessment task completed";
initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName();
cnContentUpper = "您好,您提交的评估结果已通过";
cnContentLower = "编号:" + number +
"\n标题: " + name +
"\n发起人: " + initiator +
"\n截止时间: " + endTime;
enContentUpper = "Hello! The assessment result you submitted has passed";
enContentLower = "Regulation No :" + number +
"\nTitle: " + name +
"\nInitiator: " + initiator +
"\nDue Date: " + endTime;
}else if(StringUtils.equals(msgType, MsgTypeEnum.LAWS_TECHNOLOGY_EVALUATION_AUDIT_REJECTED_MSG.getValue())){
userIdList.add(jsonObject.getString("evaluationId"));
//您提交的GB 7258 的法规技术评估流程已被退回请及时查看处理
msgContentEN = "The regulatory and technical assessment process of "+serialNumber+" you submitted has been returned, Please check and address it in time.";
msgTitle = "You have a Regulatory and technical assessment task to complete";
//msgContentEN = "The regulatory and technical assessment process of "+serialNumber+" you submitted has been returned, Please check and address it in time.";
//msgTitle = "You have a Regulatory and technical assessment task to complete";
initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName();
}else if(StringUtils.equals(msgType, MsgTypeEnum.LAWS_TECHNOLOGY_EVALUATION_EXPIRE_REMIND_MSG.getValue())){
cnContentUpper = "您好,您提交的评估结果被退回,请及时查看处理";
cnContentLower = "编号:" + number +
"\n标题: " + name +
"\n发起人: " + initiator +
"\n截止时间: " + endTime;
enContentUpper = "Hello! The assessment result you submitted has been rejected. Please check and address it in a timely manner";
enContentLower = "Regulation No :" + number +
"\nTitle: " + name +
"\nInitiator: " + initiator +
"\nDue Date: " + endTime;
} else if (StringUtils.equals(msgType, MsgTypeEnum.LAWS_TECHNOLOGY_EVALUATION_EXPIRE_REMIND_THREE_DAYS_BEFORE_MSG.getValue())) {
initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName();
cnContentUpper = "您好,该任务将于3天后到期,请及时查看处理,谢谢!";
cnContentLower = "编号:" + number +
"\n标题: " + name +
"\n发起人: " + initiator;
enContentUpper = "Hello! This task will expire in 3 days. Please check and address the task in a timely manner. Thank you!";
enContentLower = "Regulation No :" + number +
"\nTitle: " + name +
"\nInitiator: " + initiator;
userIdList = (List<String>) jsonObject.get("userIdList");
} else if (StringUtils.equals(msgType, MsgTypeEnum.LAWS_TECHNOLOGY_EVALUATION_EXPIRE_REMIND_TODAY_MSG.getValue())) {
initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName();
cnContentUpper = "您好,该任务将于今天到期,请尽快查看处理,谢谢!";
cnContentLower = "编号:" + number +
"\n标题: " + name +
"\n发起人: " + initiator;
enContentUpper = "Hello! This task will expire today. Please check and address the task ASAP. Thank you!";
enContentLower = "Regulation No :" + number +
"\nTitle: " + name +
"\nInitiator: " + initiator;
userIdList = (List<String>) jsonObject.get("userIdList");
} /*else if (StringUtils.equals(msgType, MsgTypeEnum.LAWS_TECHNOLOGY_EVALUATION_EXPIRE_REMIND_MSG.getValue())) {
userIdList = (List<String>) jsonObject.get("userIdList");
//您GB 7258的法规技术评估流程将于明天结束请及时查看处理
msgContentEN = "The the Regulatory and technical assessment of "+serialNumber+" will expire tomorrow. Please check and address it in time.";
msgTitle = "You have a Regulatory and technical assessment task to complete";
//msgContentEN = "The the Regulatory and technical assessment of "+serialNumber+" will expire tomorrow. Please check and address it in time.";
//msgTitle = "You have a Regulatory and technical assessment task to complete";
initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName();
}
} */
List<String> thirdIdList = new ArrayList<>();
List<SysUser> sysUsers = sysUserService.listByIds(userIdList);
if (ObjectUtils.isNotEmpty(sysUsers)) {
thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList());
}
//飞书跳转链接
String hrefFeishu = backUrl + JumpLinkEnum.TASK_AFFIRM_LINK.getLink();
try {
FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo();
feishuMsgVo.setTitle(title);
feishuMsgVo.setCnContentUpper(cnContentUpper);
feishuMsgVo.setCnContentLower(cnContentLower);
feishuMsgVo.setEnContentUpper(enContentUpper);
feishuMsgVo.setEnContentLower(enContentLower);
feishuMsgVo.setUrl(hrefFeishu);
feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色
feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo);
} catch (IOException e) {
log.error("飞书消息推送失败");
}
//系统内部跳转链接
String href = "<a href='" + JumpLinkEnum.TASK_AFFIRM_LINK.getLink() + "'>" + " View details" + "</a>";
String contentInfo = msgContentEN + " " + href;
//String href = "<a href='" + JumpLinkEnum.TASK_AFFIRM_LINK.getLink() + "'>" + " View details" + "</a>";
//String contentInfo = msgContentEN + " " + href;
Map<String,Object> sendMessageMap = new HashMap<>();
sendMessageMap.put("hrefFeishu",hrefFeishu);
sendMessageMap.put("contentInfo",contentInfo);
//Map<String,Object> sendMessageMap = new HashMap<>();
//sendMessageMap.put("hrefFeishu",hrefFeishu);
//sendMessageMap.put("contentInfo",contentInfo);
SendMessageUtils.sendMessage(msgTitle,msgContentEN,userIdList,lawsTechnologyEvaluationId,sendMessageMap,null, MessageTypeEnum.REGULATORY_AND_TECHNICAL_ASSESSMENT,initiator);
//SendMessageUtils.sendMessage(msgTitle,msgContentEN,userIdList,lawsTechnologyEvaluationId,sendMessageMap,null, MessageTypeEnum.REGULATORY_AND_TECHNICAL_ASSESSMENT,initiator);
}
@Override
@@ -690,13 +803,20 @@ public class LawsTechnologyEvaluationEOServiceImpl extends ServiceImpl<LawsTechn
List<LawsTechnologyEvaluationFlowDetailEO> lawsTechnologyEvaluationFlowDetailEOList = lawsTechnologyEvaluationFlowDetailEOService.list(flowDetailEOQueryWrapper);
if(CollectionUtils.isNotEmpty(lawsTechnologyEvaluationFlowDetailEOList)){
String actiProcInstIds = lawsTechnologyEvaluationFlowDetailEOList.stream().map(LawsTechnologyEvaluationFlowDetailEO::getActiProcInstId).distinct().collect(Collectors.joining(","));
List<String> actiProcInstIdList = lawsTechnologyEvaluationFlowDetailEOList.stream().map(LawsTechnologyEvaluationFlowDetailEO::getActiProcInstId).distinct().collect(Collectors.toList());
String actiProcInstIds = actiProcInstIdList.stream().collect(Collectors.joining(","));
Result<String> result = this.workFlowFeignClient.completeLawsTechnologyEvaluationTaskByPids(actiProcInstIds);
if(result.getCode().equals(CommonConstant.SC_OK_200)){
lawsTechnologyEvaluationEOList.forEach(lawsTechnologyEvaluationEO -> {
lawsTechnologyEvaluationEO.setFlowStatus(GatherResultEnum.COMPLETED.getValue());
});
this.updateBatchById(lawsTechnologyEvaluationEOList);
LambdaUpdateWrapper<ProcessInfoEO> processInfoUpdateWrap = new LambdaUpdateWrapper<>();
processInfoUpdateWrap.set(ProcessInfoEO::getStatus, TodoCenterStatusEnum.COMPLETED.getValue());
processInfoUpdateWrap.in(ProcessInfoEO::getId,actiProcInstIdList);
processInfoUpdateWrap.eq(ProcessInfoEO::getFlowType, FlowTypeEnum.FGJSPG.getValue());
this.processInfoEOService.update(processInfoUpdateWrap);
}
}
}
@@ -712,17 +832,19 @@ public class LawsTechnologyEvaluationEOServiceImpl extends ServiceImpl<LawsTechn
QueryWrapper<LawsTechnologyEvaluationFlowDetailEO> flowDetailQueryWrap = new QueryWrapper<>();
flowDetailQueryWrap.lambda().eq(LawsTechnologyEvaluationFlowDetailEO::getEvaluatorId,currentUser.getId());
List<LawsTechnologyEvaluationFlowDetailEO> flowDetailEOList = this.lawsTechnologyEvaluationFlowDetailEOService.list(flowDetailQueryWrap);
if(CollectionUtils.isNotEmpty(flowDetailEOList)){
List<String> lawsTechnologyEvaluationIdList = flowDetailEOList.stream().map(LawsTechnologyEvaluationFlowDetailEO::getLawsTechnologyEvaluationId).distinct().collect(Collectors.toList());
queryWrapper.and(query -> {
query.eq("create_by",currentUser.getUsername());
queryWrapper.and(query -> {
query.eq("create_by",currentUser.getUsername());
if(CollectionUtils.isNotEmpty(flowDetailEOList)){
List<String> lawsTechnologyEvaluationIdList = flowDetailEOList.stream().map(LawsTechnologyEvaluationFlowDetailEO::getLawsTechnologyEvaluationId).distinct().collect(Collectors.toList());
query.or(q -> {
for (String lawsTechnologyEvaluationId : lawsTechnologyEvaluationIdList) {
q.or().like("id",lawsTechnologyEvaluationId);
}
});
});
}
}
});
}
}
@@ -18,6 +18,7 @@ import com.jero.modules.document.enums.SearchEnum;
import com.jero.modules.document.utils.ReadPdfUtil;
import com.jero.modules.document.utils.ReadWordUtil;
import com.jero.modules.feishu.service.IFeishuService;
import com.jero.modules.feishu.vo.FeishuMsgVo;
import com.jero.modules.message.websocket.WebSocket;
import com.jero.modules.oss.entity.OSSFile;
import com.jero.modules.oss.service.IOSSFileService;
@@ -886,7 +887,20 @@ public class ProblemKnowledgeBaseEOServiceImpl extends ServiceImpl<ProblemKnowle
this.sendWebsocket(StringUtils.join(thirdIdList, ","), contentInfo);
//飞书
try {
this.iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), msgContentEN, MessageTypeEnum.PUSH.getName(), hrefFeishu);
//XXX向您分享了XXXXXXXXX请查看
//XXX shared xxxxxxxx with you. Please be reminded to check it out.
String contentInfoFeiCn = currentUser.getUsername()+"向您分享了"+problemKnowledgeBaseTitle+",请查看";
String msgContentENTemp = currentUser.getUsername()+" shared " + problemKnowledgeBaseTitle + " with you.Please be reminded to check it out.";
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
feishuMsgVo.setTitle(MessageTypeEnum.PUSH.getNameCn()+"/"+MessageTypeEnum.PUSH.getName());
feishuMsgVo.setUrl(hrefFeishu);
feishuMsgVo.setContentEn(msgContentENTemp);
feishuMsgVo.setContent(contentInfoFeiCn);
this.iFeishuService.sendCardMsgTerritory(thirdIdList.toArray(new String[]{}), feishuMsgVo);
// this.iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), msgContentEN, MessageTypeEnum.PUSH.getName(), hrefFeishu);
} catch (IOException e) {
log.error("飞书推送失败");
}
@@ -0,0 +1,63 @@
package com.jero.modules.project.enums;
import com.alibaba.druid.util.StringUtils;
import com.jero.common.constant.enums.CutEnum;
/**
* 清单确认节点枚举类
*/
public enum InventoryAffirmNodeEnum {
INITIATED_BY_STUDIO_ENGINEERS("studiofq","R&H Studio发起","R&H Studio initiate"),
HOMOLOGATION_ENGINEER_AUDIT ("homologationEngineer audit","认证审核","homologationEngineer audit"),
REGULATION_OWNER_AUDIT("regulationOwner audit","法规审核","regulationOwner audit"),
;
String key;
String cnName;
String enName;
private InventoryAffirmNodeEnum(String key, String cnName, String enName) {
this.key = key;
this.cnName = cnName;
this.enName = enName;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getCnName() {
return cnName;
}
public void setCnName(String cnName) {
this.cnName = cnName;
}
public String getEnName() {
return enName;
}
public void setEnName(String enName) {
this.enName = enName;
}
public static String getTextByValue(String key,String cut) {
InventoryAffirmNodeEnum[] values = values();
for (InventoryAffirmNodeEnum inventoryAffirmNodeEnum : values) {
if (inventoryAffirmNodeEnum.key.equals(key)) {
if(StringUtils.equals(cut, CutEnum.CN.getValue())){
return inventoryAffirmNodeEnum.cnName;
}else if(StringUtils.equals(cut,CutEnum.EN.getValue())){
return inventoryAffirmNodeEnum.enName;
}
}
}
return null;
}
}
@@ -34,12 +34,18 @@ public enum MsgTypeEnum {
LAWS_OPOMOPM_GATHER_START_MSG("法规意见收集发起消息","lawsOpomopmGatherStartMsg"),
LAWS_OPOMOPM_GATHER_ENALUATOR_SUBMIT_MSG("法规意见收集评估人提交任务消息","lawsOpomopmGatherEnaluatorSubmitMsg"),
LAWS_OPOMOPM_GATHER_ENALUATOR_EXPIRE_REMIND_MSG("法规意见收集到期前一天消息","lawsOpomopmGatherExpireRemindMsg"),
LAWS_OPOMOPM_GATHER_ENALUATOR_EXPIRE_REMIND_THREE_DAYS_BEFORE_MSG("法规意见收集到期前三天消息","lawsOpomopmGatherExpireRemindThreeDaysBeforeMsg"),
LAWS_OPOMOPM_GATHER_ENALUATOR_EXPIRE_REMIND_TODAY_MSG("法规意见收集到期当天消息","lawsOpomopmGatherExpireRemindTodayMsg"),
LAWS_OPOMOPM_GATHER_COMPLETE_MSG("法规意见收集任务完成通知消息","lawsOpomopmGatherCompleteMsg"),
LAWS_TECHNOLOGY_EVALUATION_START_MSG("法规技术评估发起消息","lawsTechnologyEvaluationStartMsg"),
LAWS_TECHNOLOGY_EVALUATION_ENALUATOR_SUBMIT_MSG("法规技术评估,评估人提交任务消息","lawsTechnologyEvaluationEnaluatorSubmitMsg"),
LAWS_TECHNOLOGY_EVALUATION_AUDIT_ACCEPTED_MSG("法规技术评估,发起人审核通过消息","lawsTechnologyEvaluationAuditAcceptedMsg"),
LAWS_TECHNOLOGY_EVALUATION_AUDIT_REJECTED_MSG("法规技术评估,发起人审核拒绝消息","lawsTechnologyEvaluationAuditRejectedMsg"),
LAWS_TECHNOLOGY_EVALUATION_EXPIRE_REMIND_MSG("法规技术评估到期前一天消息","lawsTechnologyEvaluationExpireRemindMsg"),
LAWS_TECHNOLOGY_EVALUATION_EXPIRE_REMIND_THREE_DAYS_BEFORE_MSG("法规技术评估到期前三天消息","lawsTechnologyEvaluationExpireRemindThreeDaysBeforeMsg"),
LAWS_TECHNOLOGY_EVALUATION_EXPIRE_REMIND_TODAY_MSG("法规技术评估到期当天消息","lawsTechnologyEvaluationExpireRemindTodayMsg"),
;
String name;
@@ -11,6 +11,7 @@ public enum OperatorTypeEnum {
* 工作流调用后台操作类型
*/
ADD("添加","add"),
UPDATE("更新","update"),
UPDATE_STATUS("修改状态","updateStatus"),
DELETE("删除","delete"),
QUERY("查询","query"),
@@ -40,6 +41,11 @@ public enum OperatorTypeEnum {
ADD_LAWS_OPINION_GATHER("添加法规意见收集数据","addLawsOpinionGather"),
UPDATE_LAWS_OPINION_GATHER_GATHER_RESULT("更新法规意见收集数据收集结果","updateLawsOpinionGatherGatherResult"),
/**
* 流程信息明细表
*/
UPDATE_PROCESS_INFO_DETAIL_BY_TASK_ID("根据taskId更新流程信息明细表","updateProcessInfoDetailByTaskId"),
;
String name;
@@ -9,10 +9,13 @@ import com.jero.common.system.vo.LoginUser;
import com.jero.modules.feishu.vo.FeishuMsgVo;
import com.jero.modules.project.entity.ProjectLawsInventoryEO;
import com.jero.modules.system.entity.SysRole;
import com.jero.modules.todoCenter.entity.ProcessInfoDetailEO;
import com.jero.modules.todoCenter.entity.ProcessInfoEO;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -149,4 +152,8 @@ public interface IProjectLawsInventoryEOService extends IService<ProjectLawsInve
Result<?> expediting(JSONObject json);
List<SysRole> getRoleByUserId(String projectLibraryId,String cut);
void addProcessInfo(ProcessInfoEO processInfoEO, String projectLibraryId, Date endTime);
void addProcessInfoDetail(String processInfoId, List<ProcessInfoDetailEO> processInfoDetailEOList, Date endTime);
}
@@ -58,6 +58,11 @@ import com.jero.modules.system.service.ISysAnnouncementService;
import com.jero.modules.system.service.ISysUserService;
import com.jero.modules.system.service.impl.SysCategoryServiceImpl;
import com.jero.modules.system.service.impl.SysDictItemServiceImpl;
import com.jero.modules.todoCenter.entity.ProcessInfoDetailEO;
import com.jero.modules.todoCenter.entity.ProcessInfoEO;
import com.jero.modules.todoCenter.enums.TodoCenterStatusEnum;
import com.jero.modules.todoCenter.service.IProcessInfoDetailEOService;
import com.jero.modules.todoCenter.service.IProcessInfoEOService;
import com.jero.modules.wkflow.entity.ProcessHistoryEO;
import com.jero.modules.wkflow.enums.DesignComplianceNodeEnum;
import com.jero.modules.wkflow.enums.FlowTypeEnum;
@@ -104,6 +109,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.*;
@@ -218,6 +224,11 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
@Autowired
private IProjectLawsInventoryRejectCauseEOService projectLawsInventoryRejectCauseEOService;
@Autowired
private IProcessInfoEOService processInfoEOService;
@Autowired
private IProcessInfoDetailEOService processInfoDetailEOService;
/**
* 保存
*
@@ -565,9 +576,20 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
this.projectTaskInventoryDetailEOService.updateById(projectTaskInventoryDetailEO);
}
}
//更新待办中心流程信息明细表处理人
this.updateProcessInfoDetailAssignee(projectLawsInventoryEO,pId,flowType);
}
}
/**
* 更新待办中心流程信息明细表处理人
* @param projectLawsInventoryEO
* @param pId
* @param flowType
*/
public void updateProcessInfoDetailAssignee(ProjectLawsInventoryEO projectLawsInventoryEO,String pId,String flowType){
this.processInfoDetailEOService.updateProcessInfoDetailUserId(projectLawsInventoryEO,pId,flowType);
}
/**
* 通过id删除
*
@@ -1382,6 +1404,12 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//清单确认截止时间
String inventoryAffirmDueDate = json.getString("inventoryAffirmDueDate");
Date endTime = new Date();
try {
endTime = sdf.parse(inventoryAffirmDueDate);
} catch (ParseException e) {
e.printStackTrace();
}
QueryWrapper<ProjectLawsInventoryEO> queryWrapper = new QueryWrapper<>();
if(StringUtils.isNotEmpty(ids)){
@@ -1391,9 +1419,9 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
List<ProjectLawsInventoryEO> projectLawsInventoryEOS = this.baseMapper.selectList(queryWrapper);
List<String> userIdList = new ArrayList<>();
List<ProcessInfoDetailEO> processInfoDetailEOList = new ArrayList<>();
for (ProjectLawsInventoryEO projectLawsInventoryEO : projectLawsInventoryEOS) {
//如果该数据的状态为 未发起或拒绝 可以发起清单确认
//未发起或拒绝 可以发起清单确认
boolean checkStatus = (StringUtils.equals(projectLawsInventoryEO.getInventoryAffirmStatus(),InventoryAffirmStatusEnum.NOT_STARTED.getValue())
||StringUtils.equals(projectLawsInventoryEO.getInventoryAffirmStatus(),InventoryAffirmStatusEnum.REJECTED.getValue()));
//如果该数据的法规工程师认证工程师都不为空
@@ -1418,13 +1446,48 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
if(homologationEngineerFlag){
updateWrapper.set(ProjectLawsInventoryEO::getHomologationEngineerSubmitStatus,null);
userIdList.add(projectLawsInventoryEO.getHomologationEngineerId());
ProcessInfoDetailEO processInfoDetailEO = new ProcessInfoDetailEO();
processInfoDetailEO.setProjectLawsInventoryId(projectLawsInventoryEO.getId());
processInfoDetailEO.setUserId(projectLawsInventoryEO.getHomologationEngineerId());
processInfoDetailEO.setTaskDefinitionKey(InventoryAffirmNodeEnum.HOMOLOGATION_ENGINEER_AUDIT.getKey());
processInfoDetailEO.setEndTime(endTime);
processInfoDetailEO.setCreateTime(new Date());
processInfoDetailEO.setCreateBy(currentUser.getId());
processInfoDetailEO.setStatus(TaskStatusEnum.NOT_DONE.getValue());
processInfoDetailEOList.add(processInfoDetailEO);
}
if(regulationOwnerFlag){
updateWrapper.set(ProjectLawsInventoryEO::getRegulationOwnerSubmitStatus,null);
userIdList.add(projectLawsInventoryEO.getRegulationOwnerId());
ProcessInfoDetailEO processInfoDetailEO = new ProcessInfoDetailEO();
processInfoDetailEO.setProjectLawsInventoryId(projectLawsInventoryEO.getId());
processInfoDetailEO.setUserId(projectLawsInventoryEO.getRegulationOwnerId());
processInfoDetailEO.setTaskDefinitionKey(InventoryAffirmNodeEnum.REGULATION_OWNER_AUDIT.getKey());
processInfoDetailEO.setEndTime(endTime);
processInfoDetailEO.setCreateTime(new Date());
processInfoDetailEO.setCreateBy(currentUser.getId());
processInfoDetailEO.setStatus(TaskStatusEnum.NOT_DONE.getValue());
processInfoDetailEOList.add(processInfoDetailEO);
}
if(homologationEngineerFlag || regulationOwnerFlag){
//创建一条当前发起清单确认的studio的已办任务
ProcessInfoDetailEO processInfoDetailEO = new ProcessInfoDetailEO();
processInfoDetailEO.setProjectLawsInventoryId(projectLawsInventoryEO.getId());
processInfoDetailEO.setUserId(currentUser.getId());
processInfoDetailEO.setTaskDefinitionKey(InventoryAffirmNodeEnum.INITIATED_BY_STUDIO_ENGINEERS.getKey());
processInfoDetailEO.setEndTime(endTime);
processInfoDetailEO.setCreateTime(new Date());
processInfoDetailEO.setCreateBy(currentUser.getId());
processInfoDetailEO.setStatus(TaskStatusEnum.HAVE_DONE.getValue());
processInfoDetailEO.setSubmitTime(new Date());
processInfoDetailEOList.add(processInfoDetailEO);
super.update(projectLawsInventoryEO, updateWrapper);
}
}
@@ -1469,6 +1532,11 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
//发送消息
sendMessage(msgTitle, msgContentEN,userIdList,projectLibraryId,sendMessageMap, feishuMsgVo, MessageTypeEnum.LIST_CONFIRMATION,currentUser.getUsername());
//往待办中心添加数据
ProcessInfoEO processInfoEO = new ProcessInfoEO();
this.addProcessInfo(processInfoEO,projectLibraryId,endTime);
this.addProcessInfoDetail(processInfoEO.getId(),processInfoDetailEOList,endTime);
}
result = "发起清单确认";
@@ -1654,6 +1722,7 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
projectLawsInventoryEO.setInventoryAffirmStatus(inventoryAffirmStatus);
}
super.baseMapper.updateById(projectLawsInventoryEO);
this.updateProcessInfoDetail(projectLawsInventoryEO.getId());
//如果法规认证工程师都提交通过法规清单 清单确认状态为接受 并且给当前项目的studio发送消息
if(StringUtils.equals(inventoryAffirmStatus,InventoryAffirmStatusEnum.ACCEPTED.getValue())){
@@ -4978,6 +5047,10 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
params.put("pIds",pIds);
//根据流程实例id 法规清单id 删除相关流程
workFlowFeignClient.deleteProcessInstanceByProjectLawsInventoryIds(params);
//清除流程中心对应的数据
params.put("ids",ids);
this.processInfoEOService.change(params);
}
return Result.OK("变更成功!");
}
@@ -8587,4 +8660,102 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
conditionAssessmentEO.setConditionAssessment(CurrentProjectStatusEnum.BLUE.getValue());
this.conditionAssessmentEOService.addOrUpdate(conditionAssessmentEO);
}
/**
* 添加流程信息
* @param processInfoEO
* @param projectLibraryId
* @param endTime
*/
@Override
public void addProcessInfo(ProcessInfoEO processInfoEO, String projectLibraryId, Date endTime){
String id = null;
//查询当前项目之前有没有启动过清单确认
QueryWrapper<ProcessInfoEO> processInfoQueryWrap = new QueryWrapper<>();
processInfoQueryWrap.lambda().eq(ProcessInfoEO::getProjectLibraryId,projectLibraryId);
processInfoQueryWrap.lambda().eq(ProcessInfoEO::getFlowType,FlowTypeEnum.QDQR.getValue());
List<ProcessInfoEO> processInfoEOList = this.processInfoEOService.list(processInfoQueryWrap);
if(CollectionUtils.isNotEmpty(processInfoEOList)){
id = processInfoEOList.get(0).getId();
//删除之前创建的数据
this.processInfoEOService.remove(processInfoQueryWrap);
}else {
id = UUID.randomUUID().toString().replace("-", "");
}
processInfoEO.setId(id);
processInfoEO.setProjectLibraryId(projectLibraryId);
processInfoEO.setEndTime(endTime);
processInfoEO.setStatus(TodoCenterStatusEnum.LIST_TO_CONFIRM.getValue());
processInfoEO.setFlowType(FlowTypeEnum.QDQR.getValue());
LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
processInfoEO.setCreateBy(currentUser.getId());
this.processInfoEOService.add(processInfoEO);
}
/**
* 添加流程信息用户的待办已办信息
* @param processInfoId
* @param processInfoDetailEOList
* @param endTime
*/
@Override
public void addProcessInfoDetail(String processInfoId, List<ProcessInfoDetailEO> processInfoDetailEOList, Date endTime){
processInfoDetailEOList.forEach(detail -> {
detail.setProcessInfoId(processInfoId);
detail.setFlowType(FlowTypeEnum.QDQR.getValue());
QueryWrapper<ProcessInfoDetailEO> deleteDetailWrap = new QueryWrapper<>();
deleteDetailWrap.lambda().eq(ProcessInfoDetailEO::getProjectLawsInventoryId,detail.getProjectLawsInventoryId());
deleteDetailWrap.lambda().eq(ProcessInfoDetailEO::getUserId,detail.getUserId());
this.processInfoDetailEOService.remove(deleteDetailWrap);
});
//删除studio在这个项目的清单确认已办任务
/*QueryWrapper<ProcessInfoDetailEO> deleteStudioDetailWrap = new QueryWrapper<>();
deleteStudioDetailWrap.lambda().eq(ProcessInfoDetailEO::getTaskDefinitionKey,InventoryAffirmNodeEnum.INITIATED_BY_STUDIO_ENGINEERS.getKey());
deleteStudioDetailWrap.lambda().eq(ProcessInfoDetailEO::getProcessInfoId,processInfoId);
this.processInfoDetailEOService.remove(deleteStudioDetailWrap);*/
this.processInfoDetailEOService.saveBatch(processInfoDetailEOList);
}
/**
* 更新流程信息用户的待办已办任务信息
* @param projeceLawsInventoryId
*/
public void updateProcessInfoDetail(String projeceLawsInventoryId){
LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
QueryWrapper<ProcessInfoDetailEO> detailQueryWrapper = new QueryWrapper<>();
detailQueryWrapper.lambda().eq(ProcessInfoDetailEO::getProjectLawsInventoryId,projeceLawsInventoryId);
detailQueryWrapper.lambda().eq(ProcessInfoDetailEO::getUserId,currentUser.getId());
detailQueryWrapper.lambda().eq(ProcessInfoDetailEO::getFlowType,FlowTypeEnum.QDQR.getValue());
List<ProcessInfoDetailEO> detailEOList = this.processInfoDetailEOService.list(detailQueryWrapper);
if(CollectionUtils.isNotEmpty(detailEOList)){
String processInfoId = detailEOList.get(0).getProcessInfoId();
detailEOList.forEach(detail -> {
detail.setSubmitTime(new Date());
detail.setStatus(TaskStatusEnum.HAVE_DONE.getValue());
});
this.processInfoDetailEOService.updateBatchById(detailEOList);
//查询当前项目下还有没有未完成的任务
QueryWrapper<ProcessInfoDetailEO> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(ProcessInfoDetailEO::getProcessInfoId,processInfoId);
queryWrapper.lambda().eq(ProcessInfoDetailEO::getStatus,TaskStatusEnum.NOT_DONE.getValue());
int count = this.processInfoDetailEOService.count(queryWrapper);
//如果没有待办任务
if(count == 0){
ProcessInfoEO processInfoEO = new ProcessInfoEO();
processInfoEO.setStatus(TodoCenterStatusEnum.COMPLETED.getValue());
processInfoEO.setId(processInfoId);
this.processInfoEOService.updateById(processInfoEO);
}
}
}
}
@@ -3,6 +3,7 @@ package com.jero.modules.project.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.api.vo.Result;
import com.jero.common.constant.enums.CutEnum;
@@ -14,6 +15,7 @@ import com.jero.modules.project.entity.*;
import com.jero.modules.project.enums.JumpLinkEnum;
import com.jero.modules.project.enums.MsgTypeEnum;
import com.jero.modules.project.enums.SendMsgFlagEnum;
import com.jero.modules.project.enums.TaskStatusEnum;
import com.jero.modules.project.mapper.*;
import com.jero.modules.project.service.IFeedbackHistoryService;
import com.jero.modules.project.service.IProjectTaskInventoryDetailEOService;
@@ -21,6 +23,8 @@ import com.jero.modules.project.service.IProjectTaskInventoryFeedbackEOService;
import com.jero.modules.project.util.SendMessageUtils;
import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.service.ISysUserService;
import com.jero.modules.todoCenter.entity.ProcessInfoDetailEO;
import com.jero.modules.todoCenter.service.IProcessInfoDetailEOService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.shiro.SecurityUtils;
@@ -61,6 +65,9 @@ public class ProjectTaskInventoryDetailEOServiceImpl extends ServiceImpl<Project
@Autowired
private IFeedbackHistoryService feedbackHistoryService;
@Autowired
private IProcessInfoDetailEOService processInfoDetailEOService;
@Value(value = "${jero.backUrl}")
private String backUrl;
@@ -106,6 +113,7 @@ public class ProjectTaskInventoryDetailEOServiceImpl extends ServiceImpl<Project
}else {
String id = UUID.randomUUID().toString().replace("-", "");
projectTaskInventoryDetail.setId(id);
projectTaskInventoryDetail.setTaskId(UUID.randomUUID().toString().replace("-", ""));
projectTaskInventoryDetailEOAddList.add(projectTaskInventoryDetail);
}
}
@@ -115,6 +123,7 @@ public class ProjectTaskInventoryDetailEOServiceImpl extends ServiceImpl<Project
List<String> createByList = new ArrayList<>();
List<ProjectTaskInventoryFeedbackEO> projectTaskInventoryFeedbackEOList = new ArrayList<>();
List<ProcessInfoDetailEO> processInfoDetailEOList = new ArrayList<>();
String serialNumber = projectTaskInventoryFeedbackEOService.createSerialNumber();
for (ProjectTaskInventoryDetailEO projectTaskInventoryDetailEO : projectTaskInventoryDetailEOAddList) {
@@ -138,6 +147,17 @@ public class ProjectTaskInventoryDetailEOServiceImpl extends ServiceImpl<Project
long number = Long.parseLong(serialNumber) + 1;
serialNumber = String.valueOf(number);
ProcessInfoDetailEO processInfoDetailEO = new ProcessInfoDetailEO();
processInfoDetailEO.setActiProcInstId(projectTaskInventoryDetailEO.getActiProcInstId());
processInfoDetailEO.setUserId(projectTaskInventoryDetailEO.getUserId());
processInfoDetailEO.setTaskDefinitionKey(projectTaskInventoryDetailEO.getTaskDefinitionKey());
processInfoDetailEO.setProjectLawsInventoryId(projectTaskInventoryDetailEO.getProjectTaskInventoryId());
processInfoDetailEO.setStatus(TaskStatusEnum.NOT_DONE.getValue());
processInfoDetailEO.setProcessInfoId(projectTaskInventoryDetailEO.getActiProcInstId());
processInfoDetailEO.setFlowType(projectTaskInventoryDetailEO.getFlowType());
processInfoDetailEO.setTaskId(projectTaskInventoryDetailEO.getTaskId());
processInfoDetailEOList.add(processInfoDetailEO);
}
}
@@ -156,6 +176,9 @@ public class ProjectTaskInventoryDetailEOServiceImpl extends ServiceImpl<Project
this.baseMapper.delete(deleteWrapper);
super.saveBatch(projectTaskInventoryDetailEOAddList);
this.processInfoDetailEOService.batchInsertDreUserTask(processInfoDetailEOList);
//获取没有发送过消息的用户
List<String> sendUserIdList = projectTaskInventoryDetailEOAddList.stream().filter(e -> {
boolean flag = true;
@@ -195,6 +218,17 @@ public class ProjectTaskInventoryDetailEOServiceImpl extends ServiceImpl<Project
Date now = new Date();
projectTaskInventoryDetailEO.setUpdateTime(now);
this.baseMapper.updateById(projectTaskInventoryDetailEO);
//如果是责任人 确认取消确认操作
if(StringUtils.equals(projectTaskInventoryDetailEO.getStatus(),TaskStatusEnum.HAVE_DONE.getValue())
|| StringUtils.equals(projectTaskInventoryDetailEO.getStatus(),TaskStatusEnum.NOT_DONE.getValue())){
ProjectTaskInventoryDetailEO taskInventoryDetailById = this.baseMapper.selectById(projectTaskInventoryDetailEO.getId());
if(taskInventoryDetailById != null){
LambdaUpdateWrapper<ProcessInfoDetailEO> processInfoDetailUpdateWrap= new LambdaUpdateWrapper();
processInfoDetailUpdateWrap.eq(ProcessInfoDetailEO::getTaskId,taskInventoryDetailById.getTaskId());
processInfoDetailUpdateWrap.set(ProcessInfoDetailEO::getStatus,projectTaskInventoryDetailEO.getStatus());
this.processInfoDetailEOService.update(processInfoDetailUpdateWrap);
}
}
}
/**
@@ -205,8 +239,9 @@ public class ProjectTaskInventoryDetailEOServiceImpl extends ServiceImpl<Project
*/
@Override
public void deleteById(String id) {
removeById(id);
QueryWrapper<ProjectTaskInventoryFeedbackEO> queryWrapper = new QueryWrapper<>();
ProjectTaskInventoryDetailEO projectTaskInventoryDetailEO = this.baseMapper.selectById(id);
removeById(id);
QueryWrapper<ProjectTaskInventoryFeedbackEO> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(ProjectTaskInventoryFeedbackEO::getProjectTaskInventoryId,id);
List<ProjectTaskInventoryFeedbackEO> list = this.projectTaskInventoryFeedbackEOService.list(queryWrapper);
if(CollectionUtils.isNotEmpty(list)){
@@ -216,6 +251,12 @@ public class ProjectTaskInventoryDetailEOServiceImpl extends ServiceImpl<Project
historyDeleteWrapper.lambda().in(FeedbackHistory::getFeedbackId,projectTaskInventoryFeedbackIdList);
this.feedbackHistoryService.remove(historyDeleteWrapper);
}
if(!Objects.isNull(projectTaskInventoryDetailEO)){
//删除待办中心待办数据
QueryWrapper<ProcessInfoDetailEO> processInfoDetailRemoveWrap = new QueryWrapper<>();
processInfoDetailRemoveWrap.lambda().eq(ProcessInfoDetailEO::getTaskId,projectTaskInventoryDetailEO.getTaskId());
this.processInfoDetailEOService.remove(processInfoDetailRemoveWrap);
}
}
/**
@@ -122,7 +122,7 @@ public class LawsMonthlyReportWriteEO implements Serializable {
/**状态*/
@Excel(name = "状态", width = 15)
@ApiModelProperty(value = "状态")
@Dict(dicCode = "state")
@Dict(dicCode = "fa3_gui1_yue4_bao4_tian2_xie3_-_-_zhuang4_tai4")
private java.lang.String state;
/**用法*/
@@ -10,6 +10,7 @@ public enum DictCodeReportEnum {
APPLYCAR("适用车型","car_type"),
APPLYSCOPE("适用范围","fa3_gui1_yue4_bao4_-_shi4_yong4_fan4_wei2"),
STATE("状态","state"),
STATE_REPORT("状态","fa3_gui1_yue4_bao4_tian2_xie3_-_-_zhuang4_tai4"),
USEMETHOD("用法","yong4_fa3");
@@ -296,14 +296,14 @@ public class LawsMonthlyReportWriteEOServiceImpl extends ServiceImpl<LawsMonthly
HttpServletRequest req) {
QueryWrapper<LawsMonthlyReportWriteEO> queryWrapper = QueryGenerator.initQueryWrapper(lawsMonthlyReportWriteEOTemp, req.getParameterMap());
queryWrapper.orderByDesc("memories_chapter_one","memories_chapter","create_time");
//新需求月报填写不设置去权限, 所有的人都可以查看--------------------------------------------------------------------------------------
//管理员查看全部数据,其余人只能查看自己的数据
LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
List<String> rolesList = sysBaseApi.getRolesByUsername(currentUser.getUsername());
if(!rolesList.contains(ProjectRoleEnum.ADMIN.getCode())){
queryWrapper.in("create_by",currentUser.getUsername());
}
// Page<LawsMonthlyReportWriteEO> page = new Page<LawsMonthlyReportWriteEO>(pageNo, pageSize);
// Page<LawsMonthlyReportWriteEO> pageInfo = this.page(page, queryWrapper);
// LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
// List<String> rolesList = sysBaseApi.getRolesByUsername(currentUser.getUsername());
// if(!rolesList.contains(ProjectRoleEnum.ADMIN.getCode())){
// queryWrapper.in("create_by",currentUser.getUsername());
// }
//-------------------------------------------------------------------------------------
//所有的月报
@@ -439,119 +439,6 @@ public class LawsMonthlyReportWriteEOServiceImpl extends ServiceImpl<LawsMonthly
}
return lawsMonthlyReportWriteEOS;
}
// @Override
// public IPage<LawsMonthlyReportWriteEO> getPageInfo(LawsMonthlyReportWriteEO lawsMonthlyReportWriteEOTemp,
// Integer pageNo,
// Integer pageSize,
// HttpServletRequest req) {
// QueryWrapper<LawsMonthlyReportWriteEO> queryWrapper = QueryGenerator.initQueryWrapper(lawsMonthlyReportWriteEOTemp, req.getParameterMap());
// queryWrapper.orderByDesc("memories_chapter_one","memories_chapter","create_time");
// //管理员查看全部数据,其余人只能查看自己的数据
// LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
// List<String> rolesList = sysBaseApi.getRolesByUsername(currentUser.getUsername());
// if(!rolesList.contains(ProjectRoleEnum.ADMIN.getCode())){
// queryWrapper.in("create_by",currentUser.getUsername());
// }
// Page<LawsMonthlyReportWriteEO> page = new Page<LawsMonthlyReportWriteEO>(pageNo, pageSize);
// Page<LawsMonthlyReportWriteEO> pageInfo = this.page(page, queryWrapper);
// //法规月报id
// List<String> lawsMonthlyReportIdList = pageInfo.getRecords().stream().map(LawsMonthlyReportWriteEO::getId).collect(Collectors.toList());
// List<String> userIdList = pageInfo.getRecords().stream().map(LawsMonthlyReportWriteEO::getLawsContact).collect(Collectors.toList());
// List<String> userIds = new ArrayList<>();
// for (String s : userIdList) {
// if(StringUtils.isNotBlank(s)){
// if(s.contains(",")){
// userIds.addAll(Arrays.asList(s.split(",")));
// }else{
// userIds.add(s);
// }
// }
// }
// List<JSONObject> jsonObjects = sysBaseApi.queryUsersByIds(StringUtils.join(userIds, ","));
// List<LoginUser> userList = new ArrayList<>();
// for (JSONObject jsonObject : jsonObjects) {
// LoginUser loginUser = JSONObject.parseObject(jsonObject.toJSONString(), LoginUser.class);
// userList.add(loginUser);
// }
//
// //获取章节目录
// List<LawsMonthlyReportTitleTemplateEO> lawsMonthlyReportTitleTemplateEOList = lawsMonthlyReportTitleTemplateEOService.list();
//
// //新征求意见清单模板
// List<NewOpinionTemplateEO> newOpinionTemplateEOList = new ArrayList<>();
// if(lawsMonthlyReportIdList.size() != 0){
// LambdaQueryWrapper<NewOpinionTemplateEO> wrapper = new LambdaQueryWrapper<>();
// wrapper.in(NewOpinionTemplateEO::getLawsMonthlyReportWriteId,lawsMonthlyReportIdList);
// newOpinionTemplateEOList = iNewOpinionTemplateEOService.list(wrapper);
// }
//
//
// //新发布标准清单模板
// List<NewStandardTemplateEO> newStandardTemplateEOList = new ArrayList<>();
// if(lawsMonthlyReportIdList.size() != 0){
// LambdaQueryWrapper<NewStandardTemplateEO> qrapperTemp = new LambdaQueryWrapper<>();
// qrapperTemp.in(NewStandardTemplateEO::getLawsMonthlyReportWriteId,lawsMonthlyReportIdList);
// newStandardTemplateEOList = iNewStandardTemplateEOService.list(qrapperTemp);
// }
//
//
// for (LawsMonthlyReportWriteEO lawsMonthlyReportWriteEO : pageInfo.getRecords()) {
// //处理法规联系人
// lawsContact(userList, lawsMonthlyReportWriteEO,lawsMonthlyReportWriteEOTemp.getCut());
// //处理章节目录
// if(StringUtils.isNotBlank(lawsMonthlyReportWriteEO.getMemoriesChapter())){
// List<LawsMonthlyReportTitleTemplateEO> lawsMonthlyReportTitleTemplateEOS = lawsMonthlyReportTitleTemplateEOList.stream()
// .filter(e -> lawsMonthlyReportWriteEO.getMemoriesChapter().equals(e.getId())).collect(Collectors.toList());
// if(CutEnum.CN.getValue().equals(lawsMonthlyReportWriteEOTemp.getCut()) && lawsMonthlyReportTitleTemplateEOS.size() != 0){
// lawsMonthlyReportWriteEO.setMemoriesChapterName(lawsMonthlyReportTitleTemplateEOS.get(0).getTitleCn());
// }else if(CutEnum.EN.getValue().equals(lawsMonthlyReportWriteEOTemp.getCut()) && lawsMonthlyReportTitleTemplateEOS.size() != 0){
// lawsMonthlyReportWriteEO.setMemoriesChapterName(lawsMonthlyReportTitleTemplateEOS.get(0).getTitleEn());
// }
// }
// //处理章节目录对应的一级目录
// if(StringUtils.isNotBlank(lawsMonthlyReportWriteEO.getMemoriesChapterOne())){
// List<LawsMonthlyReportTitleTemplateEO> lawsMonthlyReportTitleTemplateEOS = lawsMonthlyReportTitleTemplateEOList.stream()
// .filter(e -> lawsMonthlyReportWriteEO.getMemoriesChapterOne().equals(e.getId())).collect(Collectors.toList());
// if(CutEnum.CN.getValue().equals(lawsMonthlyReportWriteEOTemp.getCut()) && lawsMonthlyReportTitleTemplateEOS.size() != 0){
// lawsMonthlyReportWriteEO.setMemoriesChapterOneName(lawsMonthlyReportTitleTemplateEOS.get(0).getTitleCn());
// }else if(CutEnum.EN.getValue().equals(lawsMonthlyReportWriteEOTemp.getCut()) && lawsMonthlyReportTitleTemplateEOS.size() != 0){
// lawsMonthlyReportWriteEO.setMemoriesChapterOneName(lawsMonthlyReportTitleTemplateEOS.get(0).getTitleEn());
// }
// }
//
// if(ContentTemplateEnum.NEW_REQUEST_LIST_TEMPLATE.getValue().equals(lawsMonthlyReportWriteEO.getContentTemplate())){
// //新征求意见清单模板
// List<NewOpinionTemplateEO> collect = newOpinionTemplateEOList.stream()
// .filter(e -> lawsMonthlyReportWriteEO.getId().equals(e.getLawsMonthlyReportWriteId())).collect(Collectors.toList());
// lawsMonthlyReportWriteEO.setNewOpinionTemplateEOList(collect);
//
// }else if(ContentTemplateEnum.NEW_RELEASE_STANDARD_MANIFEST_TEMPLATE.getValue().equals(lawsMonthlyReportWriteEO.getContentTemplate())){
// //新发布标准清单模板
// List<NewStandardTemplateEO> collect = newStandardTemplateEOList.stream()
// .filter(e -> lawsMonthlyReportWriteEO.getId().equals(e.getLawsMonthlyReportWriteId())).collect(Collectors.toList());
// lawsMonthlyReportWriteEO.setNewStandardTemplateEOList(collect);
// }
//
// //处理导出状态
// String exportState = lawsMonthlyReportWriteEO.getExportState();
// if(StringUtils.isNotBlank(exportState)){
// if(ExportStateEnum.NOT_EXPORT.getValue().equals(exportState)){
// if(CutEnum.CN.getValue().equals(lawsMonthlyReportWriteEOTemp.getCut())){
// lawsMonthlyReportWriteEO.setExportStateName(ExportStateEnum.NOT_EXPORT.getName());
// }else{
// lawsMonthlyReportWriteEO.setExportStateName(ExportStateEnum.NOT_EXPORT.getNameEn());
// }
// }else if(ExportStateEnum.HAS_BEEN_EXPORT.getValue().equals(exportState)){
// if(CutEnum.CN.getValue().equals(lawsMonthlyReportWriteEOTemp.getCut())){
// lawsMonthlyReportWriteEO.setExportStateName(ExportStateEnum.HAS_BEEN_EXPORT.getName());
// }else{
// lawsMonthlyReportWriteEO.setExportStateName(ExportStateEnum.HAS_BEEN_EXPORT.getNameEn());
// }
// }
// }
// }
// return pageInfo;
// }
private void lawsContact(List<LoginUser> userList, LawsMonthlyReportWriteEO lawsMonthlyReportWriteEO,String cut) {
String lawsContact = lawsMonthlyReportWriteEO.getLawsContact();
@@ -588,12 +475,14 @@ public class LawsMonthlyReportWriteEOServiceImpl extends ServiceImpl<LawsMonthly
if(StringUtils.isNotBlank(lawsMonthlyReportWriteEO.getIds())){
wrapper.in(LawsMonthlyReportWriteEO::getId,Arrays.asList(lawsMonthlyReportWriteEO.getIds().split(",")));
}
//新需求月报填写不设置权限----------------------------------------------------------------------------------------
//管理员查看全部数据,其余人只能查看自己的数据
LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
List<String> rolesList = sysBaseApi.getRolesByUsername(currentUser.getUsername());
if(!rolesList.contains(ProjectRoleEnum.ADMIN.getCode())){
wrapper.in(LawsMonthlyReportWriteEO::getCreateBy,currentUser.getUsername());
}
// LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
// List<String> rolesList = sysBaseApi.getRolesByUsername(currentUser.getUsername());
// if(!rolesList.contains(ProjectRoleEnum.ADMIN.getCode())){
// wrapper.in(LawsMonthlyReportWriteEO::getCreateBy,currentUser.getUsername());
// }
//----------------------------------------------------------------------------------------
List<LawsMonthlyReportWriteEO> lawsMonthlyReportWriteEOS = this.list(wrapper);
if(lawsMonthlyReportWriteEOS.size() == 0){
@@ -722,10 +611,11 @@ public class LawsMonthlyReportWriteEOServiceImpl extends ServiceImpl<LawsMonthly
/**
*创建word文件
*
* @param path
* @param lawsMonthlyReportWriteEOS 列表数据
* @param lawsMonthlyReportTitleTemplateEOS 章节目录
* @param lawsMonthlyReportWriteEOS 所有月报
* @param lawsMonthlyReportTitleTemplateEOS 二级目录(没有排序)
* @param loginUserList
*/
private void createWord(String path,
List<LawsMonthlyReportWriteEO> lawsMonthlyReportWriteEOS,
@@ -874,7 +764,15 @@ public class LawsMonthlyReportWriteEOServiceImpl extends ServiceImpl<LawsMonthly
// }
/**
*
* @param lawsMonthlyReportWriteEOS 月报
* @param lawsMonthlyReportTitleTemplateEOS 二级目录(参数传过来时没有排序)
* @param reportTitleOneList 一级目录(参数传过来时已经进行正序排序)
* @param titleCN
* @param document
* @param cut
*/
private void word(List<LawsMonthlyReportWriteEO> lawsMonthlyReportWriteEOS,
List<LawsMonthlyReportTitleTemplateEO> lawsMonthlyReportTitleTemplateEOS,
List<LawsMonthlyReportTitleTemplateEO> reportTitleOneList,
@@ -891,9 +789,9 @@ public class LawsMonthlyReportWriteEOServiceImpl extends ServiceImpl<LawsMonthly
//标题
WordUtil.exportWord(document, titleCN, null, ParagraphAlignment.CENTER, 0, 14,
false, false, "Blue Sky Noto Regular",null,null,null);
//主要内容
WordUtil.exportWord(document, content, null, ParagraphAlignment.LEFT, 0, 12,
false, true, "Blue Sky Noto Regular",null,null,null);
//主要内容(新需求中去掉此行)
// WordUtil.exportWord(document, content, null, ParagraphAlignment.LEFT, 0, 12,
// false, true, "Blue Sky Noto Regular",null,null,null);
//生成页脚
WordUtil.exportHeardAndFootMain(document,moth);
int oneCount = 1;
@@ -910,12 +808,13 @@ public class LawsMonthlyReportWriteEOServiceImpl extends ServiceImpl<LawsMonthly
}
if(StringUtils.isNotBlank(oneTitle)){
WordUtil.exportWord(document, oneNumber+" "+oneTitle, null, ParagraphAlignment.LEFT,
0, 12, false, true, "Blue Sky Noto Regular","0","一级标题",null);
0, 11, false, true, "Blue Sky Noto Regular","0","一级标题",null);
oneCount++;
}
List<LawsMonthlyReportTitleTemplateEO> reportTitleTwoList = lawsMonthlyReportTitleTemplateEOS.stream().filter(e -> e.getParentId().equals(lawsMonthlyReportTitleTemplateEO.getId())).collect(Collectors.toList());
//二级目录按sort正序排序
Collections.sort(reportTitleTwoList);//正序排序
for (LawsMonthlyReportTitleTemplateEO monthlyReportTitleTemplateEO : reportTitleTwoList) {
int reportCount = 1;
@@ -933,7 +832,7 @@ public class LawsMonthlyReportWriteEOServiceImpl extends ServiceImpl<LawsMonthly
}
if(StringUtils.isNotBlank(twoTitle)){
WordUtil.exportWord(document, twoNumber+" "+twoTitle, null, ParagraphAlignment.LEFT,
2, 12, false, true, "Blue Sky Noto Regular","1","二级标题",null);
6, 11, false, true, "Blue Sky Noto Regular","1","二级标题",null);
twoCount++;
}
@@ -947,7 +846,7 @@ public class LawsMonthlyReportWriteEOServiceImpl extends ServiceImpl<LawsMonthly
}
if(org.apache.commons.lang3.StringUtils.isNotBlank(reportTitle)){
WordUtil.exportWord(document, reportCount+". "+reportTitle, null, ParagraphAlignment.LEFT,
4, 12, false, false, "Blue Sky Noto Regular","2","三级标题",null);
12, 11, false, false, "Blue Sky Noto Regular","2","三级标题",null);
reportCount++;
}
}
@@ -1050,10 +949,10 @@ public class LawsMonthlyReportWriteEOServiceImpl extends ServiceImpl<LawsMonthly
String year = lawsMonthlyReportWriteEOS.get(0).getMonth().split("-")[0];
String mothNew = lawsMonthlyReportWriteEOS.get(0).getMonth().split("-")[1];
int mothLast = Integer.valueOf(mothNew) + 1;
int mothLast = Integer.valueOf(mothNew) - 1;
//添加说明 2022/7/15 2022/8/14 期间发布的主要内容
String text = year + "/" + mothNew +"/15 至 "+year+"/"+mothLast+"/14期间发布的主要内容";
String text = year + "/" + mothLast +"/15 至 "+year+"/"+mothNew+"/14期间发布的主要内容";
WordUtil.exportWord(document, text, null, ParagraphAlignment.CENTER, 0, 11,
false, false, "Blue Sky Noto Regular",null,null,flag);
@@ -1113,7 +1012,7 @@ public class LawsMonthlyReportWriteEOServiceImpl extends ServiceImpl<LawsMonthly
String year = lawsMonthlyReportWriteEOS.get(0).getMonth().split("-")[0];
String mothNew = lawsMonthlyReportWriteEOS.get(0).getMonth().split("-")[1];
int mothLast = Integer.valueOf(mothNew) + 1;
int mothLast = Integer.valueOf(mothNew) - 1;
String moth = mothNew+"/"+year;
String mothNewEn = getMothEn(mothNew);
String mothLastEn = getMothEn(String.valueOf(mothLast));
@@ -1137,7 +1036,7 @@ public class LawsMonthlyReportWriteEOServiceImpl extends ServiceImpl<LawsMonthly
//添加说明 Update between July 15, 2022 and August 14, 2022
String text = "Update between "+mothNewEn+" 15,"+year+" and "+mothLastEn+" 14,"+year;
String text = "Update between "+mothLastEn+" 15,"+year+" and "+mothNewEn+" 14,"+year;
WordUtil.exportWord(document, text, null, ParagraphAlignment.CENTER, 0, 11,
false, false, "Blue Sky Noto Regular",null,null,flag);
@@ -1257,7 +1156,7 @@ public class LawsMonthlyReportWriteEOServiceImpl extends ServiceImpl<LawsMonthly
// WordUtil.exportHeardAndFoot(document,moth);
//生成页眉页脚
WordUtil.exportHeardAndFoot(document,moth);
WordUtil.exportHeardAndFoot(document,moth,cut);
//生成标题
// WordUtil.exportWord(document, "", null, ParagraphAlignment.CENTER, 0, 18,
// false, true, "Blue Sky Noto Regular",null,null,null);
@@ -1284,7 +1183,7 @@ public class LawsMonthlyReportWriteEOServiceImpl extends ServiceImpl<LawsMonthly
}
List<LawsMonthlyReportTitleTemplateEO> reportTitleTwoList = lawsMonthlyReportTitleTemplateEOS.stream().filter(e -> e.getParentId().equals(lawsMonthlyReportTitleTemplateEO.getId())).collect(Collectors.toList());
Collections.sort(reportTitleTwoList);//正序排序
for (LawsMonthlyReportTitleTemplateEO monthlyReportTitleTemplateEO : reportTitleTwoList) {
int reportCount = 1;
@@ -208,7 +208,7 @@ public class WordUtil {
//主要内容生成页眉页脚(office版本)
@SneakyThrows
public static void exportHeardAndFoot(XWPFDocument document,String month){
public static void exportHeardAndFoot(XWPFDocument document,String month,String cut){
XWPFHeaderFooterPolicy headerFooterPolicy = document.getHeaderFooterPolicy();
if (headerFooterPolicy == null) headerFooterPolicy = document.createHeaderFooterPolicy();
XWPFHeader header = headerFooterPolicy.createHeader(XWPFHeaderFooterPolicy.DEFAULT);
@@ -232,7 +232,14 @@ public class WordUtil {
picture.getCTPicture().getBlipFill().getBlip().setEmbed(blipID);
run.addTab();
is.close();
run.setText(" "+month);
if(CutEnum.CN.getValue().equals(cut)){
run.setText(" "+month+" (总第 期)");
}else{
String replace = month.replace("", " ").replace("", "");
String monthTemp = replace.split(" ")[1]+"/"+replace.split(" ")[0];
run.setText(" "+monthTemp+" (Issue No. )");
}
run.setFontSize(11);
run.setFontFamily("Blue Sky Noto Regular");
}
@@ -399,7 +406,7 @@ public class WordUtil {
paragraph.setAlignment(ParagraphAlignment.CENTER);
XWPFRun run = paragraph.createRun();
run.setText("NIO Internal");
run.setFontSize(18);
run.setFontSize(12);
run.setFontFamily("Blue Sky Standard Regular");
// run.setFontFamily("Blue Sky Noto Regular");
run.setBold(true);
@@ -413,8 +420,8 @@ public class WordUtil {
pgSz.setH(BigInteger.valueOf(16838));
CTPageMar pageMar = sectPr.getPgMar();
if (pageMar == null) pageMar = sectPr.addNewPgMar();
pageMar.setLeft(BigInteger.valueOf(1797)); //左边距
pageMar.setRight(BigInteger.valueOf(1797));//右边距
pageMar.setLeft(BigInteger.valueOf(1083)); //左边距
pageMar.setRight(BigInteger.valueOf(1083));//右边距
pageMar.setTop(BigInteger.valueOf(1440)); //页眉高度
pageMar.setBottom(BigInteger.valueOf(1440));//页脚高度
@@ -594,7 +601,7 @@ public class WordUtil {
//适用车型中文名
String applyCarName = dictItem(sysDictItems, applyCar,cut, DictCodeReportEnum.APPLYCAR.getValue());
String applyScopeName = dictItem(sysDictItems, applyScope,cut, DictCodeReportEnum.APPLYSCOPE.getValue());
String stateName = dictItem(sysDictItems, state,cut, DictCodeReportEnum.STATE.getValue());
String stateName = dictItem(sysDictItems, state,cut, DictCodeReportEnum.STATE_REPORT.getValue());
String useMethodName = dictItem(sysDictItems, useMethod,cut, DictCodeReportEnum.USEMETHOD.getValue());
XWPFTable table = document.createTable(10, 2);
@@ -629,9 +636,9 @@ public class WordUtil {
//第6行
// setCell(table,4, "实施车型",implementCar);
//第7行
setCell(table,4, "新车型实施日期",newCarImplementTime);
setCell(table,4, "发布日期",newCarImplementTime);
//第8行
setCell(table,5, "在产车实施日期",productionCarImplementTime);
setCell(table,5, "实施日期",productionCarImplementTime);
//第9行
setCell(table,6, "主要内容",contentCn);
//第10行
@@ -654,9 +661,9 @@ public class WordUtil {
//第6行
// setCell(table,4,"Implementation Model",implementCar);
//第7行
setCell(table,4,"New Type Execution Date",newCarImplementTime);
setCell(table,4,"Release Date",newCarImplementTime);
//第8行
setCell(table,5,"New Vehicle Execution Date",productionCarImplementTime);
setCell(table,5,"Execution Date",productionCarImplementTime);
//第9行
setCell(table,6,"Main Content",contentEn);
//第10行
@@ -1264,28 +1271,28 @@ public class WordUtil {
String blank = "";
switch (value) {
case "M":
blank = " ";
blank = " ";
break;
case "N":
blank = "\r\n";
break;
case "企业":
blank = " ";
blank = " ";
break;
case "整车":
blank = " ";
blank = " ";
break;
case "系统/零部件":
blank = "\r\n";
break;
case "新车型":
blank = " ";
blank = " ";
break;
case "在产车型`":
blank = "";
break;
case "Enterprise":
blank = " ";
blank = " ";
break;
case "Vehicle":
blank = " ";
@@ -1294,43 +1301,43 @@ public class WordUtil {
blank = "\r\n";
break;
case "New Car Model":
blank = " ";
blank = " ";
break;
case "Models In Production":
blank = "";
break;
case "草稿":
blank = " ";
blank = " ";
break;
case "公示稿":
blank = " ";
blank = " ";
break;
case "发布稿":
blank = "";
break;
case "Draft":
blank = " ";
blank = " ";
break;
case "Public Notice":
blank = " ";
blank = " ";
break;
case "Release":
blank = "";
break;
case "强制":
blank = " ";
blank = " ";
break;
case "推荐":
blank = " ";
blank = " ";
break;
case "安装需符合":
blank = "";
break;
case "Mandatory":
blank = " ";
blank = " ";
break;
case "Voluntary":
blank = " ";
blank = "\r\n";
break;
case "Mandatory if fitted":
blank = "";
@@ -2653,7 +2653,7 @@ public class FileSplitItemsEOServiceImpl extends ServiceImpl<FileSplitItemsEOMap
for (int j = 0; j < headerArr.length; j++) {
// 条款号和输入框数字类型 设置单元格格式为文本
if ("*条款号".equals(headerArr[j]) || "*Item No.".equals(headerArr[j]) || FieldTypeEnum.TEXT_NUMBER.getValue().equals(headerTypeArr[j])) {
if ("条款号".equals(headerArr[j]) || "Item No.".equals(headerArr[j]) || FieldTypeEnum.TEXT_NUMBER.getValue().equals(headerTypeArr[j])) {
sheet.setDefaultColumnStyle(j, cellStyle);
}
row.createCell(j).setCellValue(headerArr[j]);
@@ -0,0 +1,50 @@
package com.jero.modules.todoCenter.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jero.common.api.vo.Result;
import com.jero.common.aspect.annotation.AutoLog;
import com.jero.modules.todoCenter.service.IProcessInfoEOService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@Api(tags="待办中心-法规评估")
@RestController
@RequestMapping("/todoCenter/lawsAssess")
@Slf4j
public class LawsAssessTodoCenterController {
@Autowired
private IProcessInfoEOService processInfoEOService;
@AutoLog(value = "分页查询-待办任务列表")
@ApiOperation(value="分页查询-待办任务列表", notes="分页查询-待办任务列表")
@GetMapping(value = "/todoTaskList")
public Result<?> todoTaskList(@RequestParam Map<String,Object> params) {
IPage page = this.processInfoEOService.lawsAssessTodoTaskList(params);
return Result.OK(page);
}
@AutoLog(value = "分页查询-已办任务列表")
@ApiOperation(value="分页查询-已办任务列表", notes="分页查询-已办任务列表")
@GetMapping(value = "/doneProcess")
public Result<?> doneProcess(@RequestParam Map<String,Object> params) {
IPage page = this.processInfoEOService.lawsAssessDoneProcess(params);
return Result.OK(page);
}
@AutoLog(value = "分页查询-已发任务列表")
@ApiOperation(value="分页查询-已发任务列表", notes="分页查询-已发任务列表")
@GetMapping(value = "/issuedProcess")
public Result<?> issuedProcess(@RequestParam Map<String,Object> params) {
IPage page = this.processInfoEOService.lawsAssessIssuedProcess(params);
return Result.OK(page);
}
}
@@ -0,0 +1,39 @@
package com.jero.modules.todoCenter.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jero.common.api.vo.Result;
import com.jero.common.aspect.annotation.AutoLog;
import com.jero.modules.todoCenter.service.IParamsManifestTodoCenterService;
import com.jero.modules.todoCenter.vo.ParamsManifestTodoCenterEOPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author: liyawei
* @Description:
* @Date: Created in 09:43 2022/10/11
*/
@Api(tags="待办中心-参数清单")
@RestController
@RequestMapping("/todoCenter/params/manifest")
@Slf4j
public class ParamsManifestTodoCenterController {
@Autowired
private IParamsManifestTodoCenterService paramsManifestTodoCenterService;
@AutoLog(value = "分页查询")
@ApiOperation(value="分页查询", notes="分页查询")
@GetMapping(value = "/page")
// @RequiresPermissions("params:collectManifest:list")
public Result<?> page(ParamsManifestTodoCenterEOPage pageVO) {
IPage page = paramsManifestTodoCenterService.queryPage(pageVO);
return Result.OK(page);
}
}
@@ -0,0 +1,184 @@
package com.jero.modules.todoCenter.controller;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSONObject;
import com.jero.common.api.vo.Result;
import com.jero.common.system.query.QueryGenerator;
import com.jero.modules.todoCenter.entity.ProcessInfoDetailEO;
import com.jero.modules.todoCenter.service.IProcessInfoDetailEOService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import com.jero.common.system.base.controller.JeroController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.jero.common.aspect.annotation.AutoLog;
/**
* @Description: 流程信息明细表
* @Author: jero-boot
* @Date: 2022-10-14
* @Version: V1.0
*/
@Api(tags="流程信息明细表")
@RestController
@RequestMapping("/todoCenter/processInfoDetailEO")
@Slf4j
public class ProcessInfoDetailEOController extends JeroController<ProcessInfoDetailEO, IProcessInfoDetailEOService> {
@Autowired
private IProcessInfoDetailEOService processInfoDetailEOService;
/**
* 分页列表查询
*
* @param processInfoDetailEO
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@AutoLog(value = "流程信息明细表-分页列表查询")
@ApiOperation(value="流程信息明细表-分页列表查询", notes="流程信息明细表-分页列表查询")
@GetMapping(value = "/page")
public Result<?> queryPageList(ProcessInfoDetailEO processInfoDetailEO,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<ProcessInfoDetailEO> queryWrapper = QueryGenerator.initQueryWrapper(processInfoDetailEO, req.getParameterMap());
Page<ProcessInfoDetailEO> page = new Page<ProcessInfoDetailEO>(pageNo, pageSize);
IPage<ProcessInfoDetailEO> pageList = processInfoDetailEOService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 列表查询
*
* @return
*/
@AutoLog(value = "流程信息明细表-列表查询")
@ApiOperation(value="流程信息明细表-列表查询", notes="流程信息明细表-列表查询")
@GetMapping(value = "/list")
public Result<List<ProcessInfoDetailEO>> queryList() {
List<ProcessInfoDetailEO> list = processInfoDetailEOService.queryList();
return Result.OK(list);
}
/**
* 添加
*
* @param processInfoDetailEO
* @return
*/
@AutoLog(value = "流程信息明细表-添加")
@ApiOperation(value="流程信息明细表-添加", notes="流程信息明细表-添加")
@PostMapping(value = "/add")
public Result<?> add(@Validated @RequestBody ProcessInfoDetailEO processInfoDetailEO) {
processInfoDetailEOService.add(processInfoDetailEO);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param processInfoDetailEO
* @return
*/
@AutoLog(value = "流程信息明细表-编辑")
@ApiOperation(value="流程信息明细表-编辑", notes="流程信息明细表-编辑")
@PutMapping(value = "/edit")
public Result<?> edit(@Validated @RequestBody ProcessInfoDetailEO processInfoDetailEO) {
processInfoDetailEOService.editById(processInfoDetailEO);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "流程信息明细表-通过id删除")
@ApiOperation(value="流程信息明细表-通过id删除", notes="流程信息明细表-通过id删除")
@DeleteMapping(value = "/delete")
public Result<?> delete(@RequestParam(name="id",required=true) String id) {
processInfoDetailEOService.deleteById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "流程信息明细表-批量删除")
@ApiOperation(value="流程信息明细表-批量删除", notes="流程信息明细表-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.processInfoDetailEOService.deleteByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
@AutoLog(value = "流程信息明细表-通过id查询")
@ApiOperation(value="流程信息明细表-通过id查询", notes="流程信息明细表-通过id查询")
@GetMapping(value = "/queryById")
public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
ProcessInfoDetailEO processInfoDetailEO = processInfoDetailEOService.queryById(id);
if(processInfoDetailEO==null) {
return Result.error("未找到对应数据");
}
return Result.OK(processInfoDetailEO);
}
/**
* 导出excel
*
* @param request
* @param processInfoDetailEO
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, ProcessInfoDetailEO processInfoDetailEO) {
return super.exportXls(request, processInfoDetailEO, ProcessInfoDetailEO.class, "流程信息明细表");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, ProcessInfoDetailEO.class);
}
/**
* 流程调用接口
* @param jsonObject
* @return
*/
@AutoLog(value = "流程信息明细表-流程调用")
@ApiOperation(value="流程信息明细表-流程调用", notes="流程信息明细表-流程调用")
@PostMapping(value = "/processCall")
public Result<?> processCall(@RequestBody JSONObject jsonObject){
return this.processInfoDetailEOService.processCall(jsonObject);
}
}
@@ -0,0 +1,183 @@
package com.jero.modules.todoCenter.controller;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSONObject;
import com.jero.common.api.vo.Result;
import com.jero.common.system.query.QueryGenerator;
import com.jero.modules.todoCenter.entity.ProcessInfoEO;
import com.jero.modules.todoCenter.service.IProcessInfoEOService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import com.jero.common.system.base.controller.JeroController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.jero.common.aspect.annotation.AutoLog;
/**
* @Description: 流程信息表
* @Author: jero-boot
* @Date: 2022-10-14
* @Version: V1.0
*/
@Api(tags="流程信息表")
@RestController
@RequestMapping("/todoCenter/processInfoEO")
@Slf4j
public class ProcessInfoEOController extends JeroController<ProcessInfoEO, IProcessInfoEOService> {
@Autowired
private IProcessInfoEOService processInfoEOService;
/**
* 分页列表查询
*
* @param processInfoEO
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@AutoLog(value = "流程信息表-分页列表查询")
@ApiOperation(value="流程信息表-分页列表查询", notes="流程信息表-分页列表查询")
@GetMapping(value = "/page")
public Result<?> queryPageList(ProcessInfoEO processInfoEO,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<ProcessInfoEO> queryWrapper = QueryGenerator.initQueryWrapper(processInfoEO, req.getParameterMap());
Page<ProcessInfoEO> page = new Page<ProcessInfoEO>(pageNo, pageSize);
IPage<ProcessInfoEO> pageList = processInfoEOService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 列表查询
*
* @return
*/
@AutoLog(value = "流程信息表-列表查询")
@ApiOperation(value="流程信息表-列表查询", notes="流程信息表-列表查询")
@GetMapping(value = "/list")
public Result<List<ProcessInfoEO>> queryList() {
List<ProcessInfoEO> list = processInfoEOService.queryList();
return Result.OK(list);
}
/**
* 添加
*
* @param processInfoEO
* @return
*/
@AutoLog(value = "流程信息表-添加")
@ApiOperation(value="流程信息表-添加", notes="流程信息表-添加")
@PostMapping(value = "/add")
public Result<?> add(@Validated @RequestBody ProcessInfoEO processInfoEO) {
processInfoEOService.add(processInfoEO);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param processInfoEO
* @return
*/
@AutoLog(value = "流程信息表-编辑")
@ApiOperation(value="流程信息表-编辑", notes="流程信息表-编辑")
@PutMapping(value = "/edit")
public Result<?> edit(@Validated @RequestBody ProcessInfoEO processInfoEO) {
processInfoEOService.editById(processInfoEO);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "流程信息表-通过id删除")
@ApiOperation(value="流程信息表-通过id删除", notes="流程信息表-通过id删除")
@DeleteMapping(value = "/delete")
public Result<?> delete(@RequestParam(name="id",required=true) String id) {
processInfoEOService.deleteById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "流程信息表-批量删除")
@ApiOperation(value="流程信息表-批量删除", notes="流程信息表-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.processInfoEOService.deleteByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
@AutoLog(value = "流程信息表-通过id查询")
@ApiOperation(value="流程信息表-通过id查询", notes="流程信息表-通过id查询")
@GetMapping(value = "/queryById")
public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
ProcessInfoEO processInfoEO = processInfoEOService.queryById(id);
if(processInfoEO==null) {
return Result.error("未找到对应数据");
}
return Result.OK(processInfoEO);
}
/**
* 导出excel
*
* @param request
* @param processInfoEO
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, ProcessInfoEO processInfoEO) {
return super.exportXls(request, processInfoEO, ProcessInfoEO.class, "流程信息表");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, ProcessInfoEO.class);
}
/**
* 流程调用接口
* @param jsonObject
* @return
*/
@AutoLog(value = "流程信息表-流程调用")
@ApiOperation(value="流程信息表-流程调用", notes="流程信息表-流程调用")
@PostMapping(value = "/processCall")
public Result<?> processCall(@RequestBody JSONObject jsonObject){
return this.processInfoEOService.processCall(jsonObject);
}
}
@@ -0,0 +1,57 @@
package com.jero.modules.todoCenter.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jero.common.api.vo.Result;
import com.jero.common.aspect.annotation.AutoLog;
import com.jero.modules.todoCenter.service.IProcessInfoEOService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@Api(tags="待办中心-项目流程")
@RestController
@RequestMapping("/todoCenter/projectProcess")
@Slf4j
public class ProjectProcessTodoCenterController {
@Autowired
private IProcessInfoEOService processInfoEOService;
@AutoLog(value = "分页查询-待办任务列表")
@ApiOperation(value="分页查询-待办任务列表", notes="分页查询-待办任务列表")
@GetMapping(value = "/todoTaskList")
public Result<?> todoTaskList(@RequestParam Map<String,Object> params) {
IPage page = this.processInfoEOService.projectProcessTodoTaskList(params);
return Result.OK(page);
}
@AutoLog(value = "分页查询-已办任务列表")
@ApiOperation(value="分页查询-已办任务列表", notes="分页查询-已办任务列表")
@GetMapping(value = "/doneProcess")
public Result<?> doneProcess(@RequestParam Map<String,Object> params) {
IPage page = this.processInfoEOService.projectProcessDoneProcess(params);
return Result.OK(page);
}
@AutoLog(value = "分页查询-已发任务列表")
@ApiOperation(value="分页查询-已发任务列表", notes="分页查询-已发任务列表")
@GetMapping(value = "/issuedProcess")
public Result<?> issuedProcess(@RequestParam Map<String,Object> params) {
IPage page = this.processInfoEOService.projectProcessIssuedProcess(params);
return Result.OK(page);
}
@AutoLog(value = "待办中心-法规评估-初始化历史数据")
@ApiOperation(value="待办中心-法规评估-初始化历史数据", notes="待办中心-法规评估-初始化历史数据")
@GetMapping(value = "/initHistoryData")
public Result<?> initHistoryData(@RequestParam Map<String,Object> params) {
return this.processInfoEOService.initHistoryData(params);
}
}
@@ -0,0 +1,47 @@
package com.jero.modules.todoCenter.entity;
import lombok.Data;
import java.util.Date;
@Data
public class ParamsManifestTodoCenterEO {
/**
* 参数清单id
*/
private String id;
/**
* 相关项目名称
*/
private String projectName;
/**
* 参数清单标题
*/
private String title;
/**
* 相关项目版本
*/
private String projectVersion;
/**
* 待发起数量 包括状态待发起收集,变更,工程接口人退回
*/
private Integer waitCollectNum;
/**
* 待工程接口人处理数量即待分配 包括状态待工程接口人处理,填写人退回
*/
private Integer waitSdtNum;
/**
* 待填写数量 包括状态待填写,认证工程师退回
*/
private Integer waitFillNum;
private Date createTime;
private String state;
private String projectId;
}
@@ -0,0 +1,122 @@
package com.jero.modules.todoCenter.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import com.jero.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
/**
* @Description: 流程信息明细表
* @Author: jero-boot
* @Date: 2022-10-14
* @Version: V1.0
*/
@Data
@TableName("process_info_detail")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="process_info_detail对象", description="流程信息明细表")
public class ProcessInfoDetailEO implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private java.lang.String id;
/**创建人*/
@ApiModelProperty(value = "创建人")
private java.lang.String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建日期")
private java.util.Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private java.lang.String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新日期")
private java.util.Date updateTime;
/**所属部门*/
@ApiModelProperty(value = "所属部门")
private java.lang.String sysOrgCode;
/**流程实例id*/
@Excel(name = "流程实例id", width = 15)
@ApiModelProperty(value = "流程实例id")
private java.lang.String actiProcInstId;
/**待办id*/
@Excel(name = "待办id", width = 15)
@ApiModelProperty(value = "待办id")
private java.lang.String taskId;
/**处理人id*/
@Excel(name = "处理人id", width = 15)
@ApiModelProperty(value = "处理人id")
private java.lang.String userId;
/**任务状态:待办/已办*/
@Excel(name = "任务状态:待办/已办", width = 15)
@ApiModelProperty(value = "任务状态:待办/已办")
private java.lang.String status;
/**任务节点定义key*/
@Excel(name = "任务节点定义key", width = 15)
@ApiModelProperty(value = "任务节点定义key")
private java.lang.String taskDefinitionKey;
/**提交时间*/
@Excel(name = "提交时间", width = 15, format = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "提交时间")
private java.util.Date submitTime;
/**流程信息id*/
@Excel(name = "流程信息id", width = 15)
@ApiModelProperty(value = "流程信息id")
private java.lang.String processInfoId;
/**法规清单id*/
@Excel(name = "法规清单id", width = 15)
@ApiModelProperty(value = "法规清单id")
private java.lang.String projectLawsInventoryId;
/**文档库id/标准id*/
@Excel(name = "文档库id/标准id", width = 15)
@ApiModelProperty(value = "文档库id/标准id")
private java.lang.String bussDocumentLibraryId;
/**流程类型*/
@Excel(name = "流程类型", width = 15)
@ApiModelProperty(value = "流程类型")
private java.lang.String flowType;
/**截止时间*/
@Excel(name = "截止时间", width = 15, format = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "截止时间")
private java.util.Date endTime;
}
@@ -0,0 +1,141 @@
package com.jero.modules.todoCenter.entity;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: 流程信息表
* @Author: jero-boot
* @Date: 2022-10-14
* @Version: V1.0
*/
@Data
@TableName("process_info")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="process_info对象", description="流程信息表")
public class ProcessInfoEO implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private java.lang.String id;
/**创建人*/
@ApiModelProperty(value = "创建人")
private java.lang.String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建日期")
private java.util.Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private java.lang.String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新日期")
private java.util.Date updateTime;
/**所属部门*/
@ApiModelProperty(value = "所属部门")
private java.lang.String sysOrgCode;
/**项目库id*/
@Excel(name = "项目库id", width = 15)
@ApiModelProperty(value = "项目库id")
private java.lang.String projectLibraryId;
/**法规清单id*/
@Excel(name = "法规清单id", width = 15)
@ApiModelProperty(value = "法规清单id")
private java.lang.String projectLawsInventoryId;
/**文档库id/标准id*/
@Excel(name = "文档库id/标准id", width = 15)
@ApiModelProperty(value = "文档库id/标准id")
private java.lang.String bussDocumentLibraryId;
/**流程实例id*/
@Excel(name = "流程实例id", width = 15)
@ApiModelProperty(value = "流程实例id")
private java.lang.String actiProcInstId;
/**流程类型*/
@Excel(name = "流程类型", width = 15)
@ApiModelProperty(value = "流程类型")
private java.lang.String flowType;
/**截止日期*/
@Excel(name = "截止日期", width = 15, format = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "截止日期")
private java.util.Date endTime;
/**任务状态*/
@Excel(name = "任务状态", width = 15)
@ApiModelProperty(value = "任务状态")
private java.lang.String status;
@ApiModelProperty(value = "流程编号")
private String prcNum;
@ApiModelProperty(value = "流程名称")
private String prcName;
/**流程类型展示字段*/
@TableField(exist = false)
private String flowTypeShow;
/**任务状态展示字段*/
@TableField(exist = false)
private String statusShow;
/**上一个操作人 用户id*/
@TableField(exist = false)
private String lastAssignee;
@TableField(exist = false)
private String lastAssigneeName;
/**当前操作人/代理人 用户id*/
@TableField(exist = false)
private String assignee;
@TableField(exist = false)
private String assigneeName;
/**标准编号*/
@TableField(exist = false)
private String serialNumber;
/**标准标题*/
@TableField(exist = false)
private String title;
/**项目名称*/
@TableField(exist = false)
private String projectName;
/**年份*/
@TableField(exist = false)
private String yearName;
/**待办id*/
@TableField(exist = false)
private String taskId;
/**任务节点定义key*/
@TableField(exist = false)
private String taskDefinitionKey;
}
@@ -0,0 +1,64 @@
package com.jero.modules.todoCenter.enums;
import com.jero.common.constant.enums.CutEnum;
import org.apache.commons.lang3.StringUtils;
/**
* 待办中心状态枚举类
*/
public enum TodoCenterStatusEnum {
LIST_TO_CONFIRM("待确认","List to confirm","List to confirm"),
COMPLETED("已完成","Completed","Completed"),
INQUIRY("询问","Inquiry","Inquiry"),
TO_SUBMIT("待提交","To submit","To submit"),
TO_AUDIT("待审核","To audit","To audit"),
;
String cnName;
String enName;
String value;
private TodoCenterStatusEnum(String cnName,String enName, String value) {
this.cnName = cnName;
this.enName = enName;
this.value = value;
}
public String getCnName() {
return cnName;
}
public void setCnName(String cnName) {
this.cnName = cnName;
}
public String getEnName() {
return enName;
}
public void setEnName(String enName) {
this.enName = enName;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public static String getTextByValue(String value,String cut) {
TodoCenterStatusEnum[] values = values();
for (TodoCenterStatusEnum todoCenterStatusEnum : values) {
if (todoCenterStatusEnum.value.equals(value)) {
if(StringUtils.equals(cut, CutEnum.CN.getValue())){
return todoCenterStatusEnum.cnName;
}else if(StringUtils.equals(cut,CutEnum.EN.getValue())){
return todoCenterStatusEnum.enName;
}
}
}
return null;
}
}
@@ -0,0 +1,17 @@
package com.jero.modules.todoCenter.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.jero.modules.todoCenter.entity.ProcessInfoDetailEO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 流程信息明细表
* @Author: jero-boot
* @Date: 2022-10-14
* @Version: V1.0
*/
public interface ProcessInfoDetailEOMapper extends BaseMapper<ProcessInfoDetailEO> {
}
@@ -0,0 +1,40 @@
package com.jero.modules.todoCenter.mapper;
import java.util.Map;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jero.modules.todoCenter.entity.ProcessInfoEO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.todoCenter.vo.ProcessInfoVO;
/**
* @Description: 流程信息表
* @Author: jero-boot
* @Date: 2022-10-14
* @Version: V1.0
*/
public interface ProcessInfoEOMapper extends BaseMapper<ProcessInfoEO> {
/**
* 查询项目流程分页列表已办已发使用
* @param page
* @param params
* @return
*/
IPage<ProcessInfoVO> queryProjectProcessPageList(IPage page, Map<String, Object> params);
/**+
* 查询项目流程-待办列表
* @param page
* @param params
* @return
*/
IPage<ProcessInfoVO> queryProjectProcessTodoTaskListList(IPage page,Map<String, Object> params);
/**
* 查询法规评估流程分页列表
* @param page
* @param params
* @return
*/
IPage<ProcessInfoVO> queryLawsAssessPageList(IPage page, Map<String, Object> params);
}
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jero.modules.todoCenter.mapper.ProcessInfoDetailEOMapper">
<resultMap id="ProcessInfoDetailEOResultMap" type="com.jero.modules.todoCenter.entity.ProcessInfoDetailEO">
<id column="id" property="id" />
<result column="create_by" property="createBy" />
<result column="create_time" property="createTime" />
<result column="update_by" property="updateBy" />
<result column="update_time" property="updateTime" />
<result column="sys_org_code" property="sysOrgCode" />
<result column="acti_proc_inst_id" property="actiProcInstId" />
<result column="task_id" property="taskId" />
<result column="user_id" property="userId" />
<result column="status" property="status" />
<result column="task_definition_key" property="taskDefinitionKey" />
<result column="submit_time" property="submitTime" />
<result column="process_info_id" property="processInfoId" />
<result column="project_laws_inventory_id" property="projectLawsInventoryId" />
<result column="buss_document_library_id" property="bussDocumentLibraryId" />
<result column="flow_type" property="flowType" />
</resultMap>
</mapper>
@@ -0,0 +1,314 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jero.modules.todoCenter.mapper.ProcessInfoEOMapper">
<resultMap id="ProcessInfoEOResultMap" type="com.jero.modules.todoCenter.entity.ProcessInfoEO">
<id column="id" property="id" />
<result column="create_by" property="createBy" />
<result column="create_time" property="createTime" />
<result column="update_by" property="updateBy" />
<result column="update_time" property="updateTime" />
<result column="sys_org_code" property="sysOrgCode" />
<result column="project_library_id" property="projectLibraryId" />
<result column="project_laws_inventory_id" property="projectLawsInventoryId" />
<result column="buss_document_library_id" property="bussDocumentLibraryId" />
<result column="acti_proc_inst_id" property="actiProcInstId" />
<result column="flow_type" property="flowType" />
<result column="end_time" property="endTime" />
<result column="status" property="status" />
</resultMap>
<sql id="BaseQuerySql">
<where>
<if test="params.projectName != null and params.projectName !=''">
and (
temp.project_name like CONCAT(CONCAT('%',#{params.projectName}),'%')
or temp.year_name like CONCAT(CONCAT('%',#{params.projectName}),'%')
)
</if>
<if test="params.standardInfo != null and params.standardInfo !=''">
and temp.standard_info like CONCAT(CONCAT('%',#{params.standardInfo}),'%')
</if>
<if test="params.flowType != null and params.flowType !=''">
and temp.flow_type = #{params.flowType}
</if>
<if test="params.status != null and params.status !=''">
and temp.status = #{params.status}
</if>
</where>
</sql>
<select id="queryProjectProcessPageList" resultType="com.jero.modules.todoCenter.vo.ProcessInfoVO">
select temp.* from (
SELECT
pi.id,
pi.project_library_id,
pi.project_laws_inventory_id,
pi.buss_document_library_id,
pi.acti_proc_inst_id,
pni.project_name,
pyni.year_name,
pli.serial_number,
pli.title,
bdl.title_en,
<if test="params.cut == 'cn'">
concat(pli.serial_number,'、',pli.title) as standard_info,
</if>
<if test="params.cut == 'en'">
concat(pli.serial_number,'、',bdl.title_en) as standard_info,
</if>
pi.flow_type,
createBy.username as "create_by",
pi.end_time,
(
select
detail.task_id
from
process_info_detail detail
where detail.process_info_id = pi.id and detail.user_id = #{params.currentUserId} order by submit_time desc limit 1
) as task_id,
(
select
detail.task_definition_key
from
process_info_detail detail
where detail.process_info_id = pi.id and detail.user_id = #{params.currentUserId} order by submit_time desc limit 1
) as task_definition_key,
pi.status,
pi.prc_num,
pi.prc_name,
plb.project_name_id,
plb.target_market,
plb.studio_engineer
FROM
process_info pi
left join project_library_base plb on plb.id = pi.project_library_id
left join project_name_info pni on pni.id = plb.project_name_id
left join project_year_name_info pyni on pyni.id = plb.year_name_id
left join project_laws_inventory pli on pi.project_laws_inventory_id = pli.id
LEFT JOIN sys_user createBy on createBy.id = pi.create_by
LEFT JOIN buss_document_library bdl ON pi.buss_document_library_id = bdl.id
<where>
and pi.id IN (
SELECT
pid.process_info_id
FROM
process_info_detail pid
<where>
pid.user_id = #{params.currentUserId}
<if test="params.taskStatus != null and params.taskStatus != ''">
and pid.status = #{params.taskStatus}
</if>
</where>
)
<if test="params.flowTypeList != null">
and pi.flow_type in
<foreach collection="params.flowTypeList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="params.queryType == 'issuedProcess'">
<if test="params.createBy != null and params.createBy != ''">
and pi.create_by = #{params.createBy}
</if>
</if>
</where>
) temp
<include refid="BaseQuerySql"/>
order by temp.end_time desc
</select>
<select id="queryProjectProcessTodoTaskListList" resultType="com.jero.modules.todoCenter.vo.ProcessInfoVO">
select temp.* from (
SELECT
pi.id,
pi.project_library_id,
pi.project_laws_inventory_id,
pi.buss_document_library_id,
pi.acti_proc_inst_id,
pni.project_name,
pyni.year_name,
pli.serial_number,
pli.title,
bdl.title_en,
<if test="params.cut == 'cn'">
concat(pli.serial_number,'、',pli.title) as standard_info,
</if>
<if test="params.cut == 'en'">
concat(pli.serial_number,'、',bdl.title_en) as standard_info,
</if>
pi.flow_type,
createBy.username AS "create_by",
pi.end_time,
(
select
detail.task_id
from
process_info_detail detail
where detail.process_info_id = pi.id and detail.user_id = #{params.currentUserId} and detail.`status` = 'NotDone' limit 1
) as task_id,
(
select
detail.task_definition_key
from
process_info_detail detail
where detail.process_info_id = pi.id and detail.user_id = #{params.currentUserId} and detail.`status` = 'NotDone' limit 1
) as task_definition_key,
pi.STATUS,
pi.prc_num,
pi.prc_name,
plb.project_name_id,
plb.target_market,
plb.studio_engineer
FROM
process_info pi
LEFT JOIN project_library_base plb ON plb.id = pi.project_library_id
LEFT JOIN project_name_info pni ON pni.id = plb.project_name_id
LEFT JOIN project_year_name_info pyni ON pyni.id = plb.year_name_id
LEFT JOIN project_laws_inventory pli ON pi.project_laws_inventory_id = pli.id
LEFT JOIN sys_user createBy ON createBy.id = pi.create_by
LEFT JOIN buss_document_library bdl ON pi.buss_document_library_id = bdl.id
where
(
pi.id IN (
SELECT
pid.process_info_id
FROM
process_info_detail pid
where pid.user_id = #{params.currentUserId} and pid.status = #{params.taskStatus}
)
)
AND pi.flow_type IN
<foreach collection="params.flowTypeList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
union
SELECT
pi.id,
pi.project_library_id,
pi.project_laws_inventory_id,
pi.buss_document_library_id,
pi.acti_proc_inst_id,
pni.project_name,
pyni.year_name,
'--' as serial_number,
'--' as standard_info,
'' as title,
'' as title_en,
pi.flow_type,
createBy.username AS "create_by",
(
select
pid.end_time
from
process_info_detail pid
where pid.process_info_id = pi.id and pid.STATUS = 'NotDone' order by pid.end_time asc limit 1
) as end_time,
'' as task_id,
'' as task_definition_key,
pi.STATUS,
pi.prc_num,
pi.prc_name,
plb.project_name_id,
plb.target_market,
plb.studio_engineer
FROM
process_info pi
LEFT JOIN project_library_base plb ON plb.id = pi.project_library_id
LEFT JOIN project_name_info pni ON pni.id = plb.project_name_id
LEFT JOIN project_year_name_info pyni ON pyni.id = plb.year_name_id
LEFT JOIN project_laws_inventory pli ON pi.project_laws_inventory_id = pli.id
LEFT JOIN sys_user createBy ON createBy.id = pi.create_by
WHERE
(
pi.id IN (
SELECT
pid.process_info_id
FROM
process_info_detail pid
where pid.user_id = #{params.currentUserId} and pid.status = #{params.taskStatus}
)
)
AND pi.flow_type = #{params.qdqrFlowTypeValue}
)temp
<include refid="BaseQuerySql"/>
order by temp.end_time asc
</select>
<select id="queryLawsAssessPageList" resultType="com.jero.modules.todoCenter.vo.ProcessInfoVO">
select temp.* from (
SELECT
pi.id,
pi.buss_document_library_id,
bdl.serial_number,
bdl.title,
bdl.title_en,
<if test="params.cut == 'cn'">
concat(bdl.serial_number,'、',bdl.title) as standard_info,
</if>
<if test="params.cut == 'en'">
concat(bdl.serial_number,'、',bdl.title_en) as standard_info,
</if>
pi.flow_type,
pi.end_time,
pi.STATUS,
pi.prc_num,
pi.prc_name,
(
select
detail.task_id
from
process_info_detail detail
where detail.process_info_id = pi.id and detail.user_id = #{params.currentUserId}
<if test="params.queryType == 'todoProcess'">
and detail.`status` = #{params.taskStatus}
</if>
order by detail.submit_time desc
limit 1
) as task_id,
(
select
detail.task_definition_key
from
process_info_detail detail
where detail.process_info_id = pi.id and detail.user_id = #{params.currentUserId}
<if test="params.queryType == 'todoProcess'">
and detail.`status` = #{params.taskStatus}
</if>
order by detail.submit_time desc
limit 1
) as task_definition_key,
createBy.username AS create_by,
pi.acti_proc_inst_id,
pi.create_time
FROM
process_info pi
LEFT JOIN buss_document_library bdl ON pi.buss_document_library_id = bdl.id
LEFT JOIN sys_user createBy on createBy.id = pi.create_by
<where>
pi.flow_type IN
<foreach collection="params.flowTypeList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
<if test="params.queryType == 'issuedProcess'">
and pi.create_by = #{params.createBy}
</if>
<if test="params.queryType != 'issuedProcess'">
and (
pi.id IN (
SELECT
pid.process_info_id
FROM
process_info_detail pid
where pid.user_id = #{params.currentUserId} and pid.status = #{params.taskStatus}
)
)
</if>
</where>
) temp
<include refid="BaseQuerySql"/>
<if test="params.queryType == 'todoProcess' ">
order by temp.end_time asc
</if>
<if test="params.queryType != 'todoProcess' ">
order by temp.end_time desc
</if>
</select>
</mapper>
@@ -0,0 +1,16 @@
package com.jero.modules.todoCenter.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jero.modules.todoCenter.vo.ParamsManifestTodoCenterEOPage;
/**
* @Author: liyawei
* @Description:
* @Date: Created in 09:43 2022/10/11
*/
public interface IParamsManifestTodoCenterService {
// 分页查询当前登录人待办清单列表
IPage queryPage(ParamsManifestTodoCenterEOPage pageVO);
}
@@ -0,0 +1,85 @@
package com.jero.modules.todoCenter.service;
import com.alibaba.fastjson.JSONObject;
import com.jero.common.api.vo.Result;
import com.jero.modules.project.entity.ProjectLawsInventoryEO;
import com.jero.modules.todoCenter.entity.ProcessInfoDetailEO;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* @Description: 流程信息明细表
* @Author: jero-boot
* @Date: 2022-10-14
* @Version: V1.0
*/
public interface IProcessInfoDetailEOService extends IService<ProcessInfoDetailEO> {
/**
* 保存
*
* @param processInfoDetailEO
* @return
*/
void add(ProcessInfoDetailEO processInfoDetailEO);
/**
* 更新
*
* @param processInfoDetailEO
* @return
*/
void editById(ProcessInfoDetailEO processInfoDetailEO);
/**
* 通过id删除
*
* @param id
* @return
*/
void deleteById(String id);
/**
* 批量删除
*
* @param ids
* @return
*/
void deleteByIds(List<String> ids);
/**
* 通过id查询
*
* @param id
* @return
*/
ProcessInfoDetailEO queryById(String id);
/**
* 列表查询
*
* @return
*/
List<ProcessInfoDetailEO> queryList();
/**
* 流程调用
* @param jsonObject
* @return
*/
Result<?> processCall(JSONObject jsonObject);
/**
* 批量插入dre工程师的待办任务
* @param processInfoDetailEOList
*/
void batchInsertDreUserTask(List<ProcessInfoDetailEO> processInfoDetailEOList);
/**
* 更新待办中心流程信息明细表处理人
* @param projectLawsInventoryEO
* @param pId
* @param flowType
*/
void updateProcessInfoDetailUserId(ProjectLawsInventoryEO projectLawsInventoryEO, String pId, String flowType);
}
@@ -0,0 +1,122 @@
package com.jero.modules.todoCenter.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jero.common.api.vo.Result;
import com.jero.modules.todoCenter.entity.ProcessInfoEO;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import java.util.Map;
/**
* @Description: 流程信息表
* @Author: jero-boot
* @Date: 2022-10-14
* @Version: V1.0
*/
public interface IProcessInfoEOService extends IService<ProcessInfoEO> {
/**
* 保存
*
* @param processInfoEO
* @return
*/
void add(ProcessInfoEO processInfoEO);
/**
* 更新
*
* @param processInfoEO
* @return
*/
void editById(ProcessInfoEO processInfoEO);
/**
* 通过id删除
*
* @param id
* @return
*/
void deleteById(String id);
/**
* 批量删除
*
* @param ids
* @return
*/
void deleteByIds(List<String> ids);
/**
* 通过id查询
*
* @param id
* @return
*/
ProcessInfoEO queryById(String id);
/**
* 列表查询
*
* @return
*/
List<ProcessInfoEO> queryList();
/**
* 流程调用
* @param jsonObject
* @return
*/
Result<?> processCall(JSONObject jsonObject);
/**
* 项目流程-待办任务列表
* @param params
* @return
*/
IPage projectProcessTodoTaskList(Map<String,Object> params);
/**
* 项目流程-已办任务列表
* @param params
* @return
*/
IPage projectProcessDoneProcess(Map<String, Object> params);
/**
* 项目流程-已发任务列表
* @param params
* @return
*/
IPage projectProcessIssuedProcess(Map<String, Object> params);
/**
* 法规清单变更清除对应待办中心数据
* @param params
*/
void change(Map<String,Object> params);
/**
* 法规评估-待办任务列表
* @param params
* @return
*/
IPage lawsAssessTodoTaskList(Map<String, Object> params);
/**
* 法规评估-已办任务列表
* @param params
* @return
*/
IPage lawsAssessDoneProcess(Map<String, Object> params);
/**
* 法规评估-已发任务列表
* @param params
* @return
*/
IPage lawsAssessIssuedProcess(Map<String, Object> params);
Result<?> initHistoryData(Map<String, Object> params);
}
@@ -0,0 +1,347 @@
package com.jero.modules.todoCenter.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.common.system.vo.LoginUser;
import com.jero.modules.cert.collect.entity.ParamsCollectManifestEO;
import com.jero.modules.cert.collect.enums.CollectManifestStateEnum;
import com.jero.modules.cert.collect.enums.CollectManifestUserTypeEnum;
import com.jero.modules.cert.collect.enums.ManifestStateEnum;
import com.jero.modules.cert.collect.mapper.ParamsCollectManifestEOMapper;
import com.jero.modules.cert.collect.mapper.ParamsManifestEOMapper;
import com.jero.modules.project.entity.ProjectLibraryBase;
import com.jero.modules.project.entity.ProjectRelatedPersonnel;
import com.jero.modules.project.mapper.ProjectLibraryBaseMapper;
import com.jero.modules.project.service.IProjectRelatedPersonnelService;
import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.service.ISysUserService;
import com.jero.modules.todoCenter.entity.ParamsManifestTodoCenterEO;
import com.jero.modules.todoCenter.service.IParamsManifestTodoCenterService;
import com.jero.modules.todoCenter.vo.ParamsManifestTodoCenterEOPage;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Author: liyawei
* @Description:
* @Date: Created in 09:43 2022/10/11
*/
@Service
public class ParamsManifestTodoCenterServiceImpl implements IParamsManifestTodoCenterService {
@Autowired
private ProjectLibraryBaseMapper projectLibraryBaseMapper;
@Autowired
private ISysUserService sysUserService;
@Autowired
private IProjectRelatedPersonnelService projectRelatedPersonnelService;
@Autowired
private ParamsCollectManifestEOMapper paramsCollectManifestEOMapper;
@Autowired
private ParamsManifestEOMapper paramsManifestEOMapper;
@Override
public IPage queryPage(ParamsManifestTodoCenterEOPage pageVO) {
// 查询所有项目下的 状态为收集中的清单
pageVO.setState(ManifestStateEnum.COLLECTING.getValue());
List<ParamsManifestTodoCenterEO> paramsManifestEOListAll = paramsManifestEOMapper.listForTodoCenter(pageVO);
// 筛选出当前登录人能在清单中是homo/sdt/dre角色的清单并分页
LambdaQueryWrapper<ProjectLibraryBase> projectLibraryBaseLambdaQueryWrapper = new LambdaQueryWrapper<>();
List<ProjectLibraryBase> projectLibraryBaseListAll = projectLibraryBaseMapper.selectList(projectLibraryBaseLambdaQueryWrapper);
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); // 获取当前登录用户
List<ParamsManifestTodoCenterEO> paramsManifestEOList = new ArrayList<>();
List<ProjectLibraryBase> projectLibraryBaseList = new ArrayList<>();
Map<String, Boolean> manifestUserTypeOfHomo = new HashMap<>();
Map<String, Boolean> manifestUserTypeOfSdt = new HashMap<>();
Map<String, Boolean> manifestUserTypeOfDre = new HashMap<>();
Map<String, List<ParamsCollectManifestEO>> paramsManifestEOListMap = new HashMap<>();
// 查询清单的所有参数项
List<ParamsCollectManifestEO> pcmListAll = paramsCollectManifestEOMapper.listInfoOfTodoCenter();
String userType = "";
for(ParamsManifestTodoCenterEO paramsManifestEO : paramsManifestEOListAll) {
// 查询清单的所有参数项
List<ParamsCollectManifestEO> pcmList = pcmListAll.stream().filter(e->paramsManifestEO.getId().equals(e.getParamsManifestId())).collect(Collectors.toList());
int count1 = (int) pcmList.stream().filter(e-> CollectManifestStateEnum.SUBMIT.getValue().equals(e.getState())
|| CollectManifestStateEnum.SYNC_REPORT.getValue().equals(e.getState())).count();
if (count1 == pcmList.size()) {
continue;
}
// 判断是不是homo角色
projectLibraryBaseList = projectLibraryBaseListAll.stream().filter(e->paramsManifestEO.getProjectId().equals(e.getId())).collect(Collectors.toList());
userType = getLoginUserTypeOfHomo(projectLibraryBaseList, loginUser);
if(StringUtils.isNotBlank(userType)) {
paramsManifestEOList.add(paramsManifestEO);
manifestUserTypeOfHomo.put(paramsManifestEO.getId(), true);
paramsManifestEOListMap.put(paramsManifestEO.getId(), pcmList);
continue;
}
// 判断是不是sdt角色
userType = getLoginUserTypeOfSdt(pcmList, loginUser);
if(StringUtils.isNotBlank(userType)) {
paramsManifestEOList.add(paramsManifestEO);
manifestUserTypeOfSdt.put(paramsManifestEO.getId(), true);
paramsManifestEOListMap.put(paramsManifestEO.getId(), pcmList);
continue;
}
// 判断是不是dre角色
userType = getLoginUserTypeOfDre(pcmList, loginUser);
if(StringUtils.isNotBlank(userType)) {
paramsManifestEOList.add(paramsManifestEO);
manifestUserTypeOfDre.put(paramsManifestEO.getId(), true);
paramsManifestEOListMap.put(paramsManifestEO.getId(), pcmList);
continue;
}
}
// 分页
paramsManifestEOList = paramsManifestEOList.stream()
.sorted(Comparator.comparing(ParamsManifestTodoCenterEO::getCreateTime).reversed())
.collect(Collectors.toList());
List<ParamsManifestTodoCenterEO> result = new ArrayList<>();
int pageNo = pageVO.getPageNo();
int pageSize = pageVO.getPageSize();
IPage page = new Page(pageNo, pageSize);
page.setTotal(paramsManifestEOList.size());
int subSize = pageVO.getPageSize(); // 每页记录数
int subCount = paramsManifestEOList.size(); // 总记录数
int subPageTotal = (subCount / subSize) + ((subCount % subSize > 0) ? 1 : 0); //总页数
// 分页计算
int fromIndex = (pageNo-1) * subSize;
int toIndex = ((pageNo == subPageTotal) ? subCount : (pageNo * subSize));
if( fromIndex <= subCount && toIndex <= subCount) {
result = paramsManifestEOList.subList(fromIndex, toIndex);
} else {
result = new ArrayList();
}
// 统计清单中的待办参数数据
List<ParamsManifestTodoCenterEO> records = getStatistics(result, manifestUserTypeOfHomo, manifestUserTypeOfSdt, manifestUserTypeOfDre, paramsManifestEOListMap,loginUser);
page.setRecords(records);
return page;
}
public List<ParamsManifestTodoCenterEO> getStatistics(List<ParamsManifestTodoCenterEO> paramsManifestEOList, Map<String, Boolean> manifestUserTypeOfHomo
,Map<String, Boolean> manifestUserTypeOfSdt, Map<String, Boolean> manifestUserTypeOfDre, Map<String, List<ParamsCollectManifestEO>> paramsManifestEOListMap, LoginUser loginUser) {
List<ParamsManifestTodoCenterEO> paramsManifestTodoCenterEOList = new ArrayList<>();
for(ParamsManifestTodoCenterEO paramsManifestTodoCenterEO : paramsManifestEOList) {
// 查询清单的所有参数项
ParamsCollectManifestEO paramsCollectManifestEO = new ParamsCollectManifestEO();
paramsCollectManifestEO.setParamsManifestId(paramsManifestTodoCenterEO.getId());
List<ParamsCollectManifestEO> pcmList = paramsManifestEOListMap.get(paramsManifestTodoCenterEO.getId());
int count = 0;
if (ObjectUtil.isNotEmpty(paramsManifestTodoCenterEO.getId()) && manifestUserTypeOfHomo.get(paramsManifestTodoCenterEO.getId())) {
// 统计待发起数量 包括状态待发起收集,变更,工程接口人退回
count = (int) pcmList.stream().filter(e-> CollectManifestStateEnum.WAIT_COLLECT.getValue().equals(e.getState())
|| CollectManifestStateEnum.SDT_BACK.getValue().equals(e.getState())
|| CollectManifestStateEnum.CHANGE.getValue().equals(e.getState())).count();
if (count > 0) {
paramsManifestTodoCenterEO.setWaitCollectNum(count);
}
// 统计待分配数量 包括状态待工程接口人处理,填写人退回
count = (int) pcmList.stream().filter(e-> (CollectManifestStateEnum.WAIT_SDT.getValue().equals(e.getState())
|| CollectManifestStateEnum.DRE_BACK.getValue().equals(e.getState()))).count();
if (count > 0) {
paramsManifestTodoCenterEO.setWaitSdtNum(count);
}
// 统计待填写数量 包括状态待填写,认证工程师退回
count = (int) pcmList.stream().filter(e-> (CollectManifestStateEnum.WAIT_FILL.getValue().equals(e.getState())
|| CollectManifestStateEnum.CERT_BACK.getValue().equals(e.getState()))).count();
if (count > 0) {
paramsManifestTodoCenterEO.setWaitFillNum(count);
}
} else if (ObjectUtil.isNotEmpty(paramsManifestTodoCenterEO.getId()) && manifestUserTypeOfSdt.get(paramsManifestTodoCenterEO.getId())) {
// 统计待分配数量 包括状态待工程接口人处理,填写人退回
count = (int) pcmList.stream().filter(e-> (CollectManifestStateEnum.WAIT_SDT.getValue().equals(e.getState())
|| CollectManifestStateEnum.DRE_BACK.getValue().equals(e.getState()))
&& loginUser.getUsername().equals(e.getSdt())).count();
if (count > 0) {
paramsManifestTodoCenterEO.setWaitSdtNum(count);
}
// 统计待填写数量 包括状态待填写,认证工程师退回
count = (int) pcmList.stream().filter(e-> (CollectManifestStateEnum.WAIT_FILL.getValue().equals(e.getState())
|| CollectManifestStateEnum.CERT_BACK.getValue().equals(e.getState()))).count();
if (count > 0) {
paramsManifestTodoCenterEO.setWaitFillNum(count);
}
} else if (ObjectUtil.isNotEmpty(paramsManifestTodoCenterEO.getId()) && manifestUserTypeOfDre.get(paramsManifestTodoCenterEO.getId())) {
// 统计待填写数量 包括状态待填写,认证工程师退回
count = (int) pcmList.stream().filter(e-> (CollectManifestStateEnum.WAIT_FILL.getValue().equals(e.getState())
|| CollectManifestStateEnum.CERT_BACK.getValue().equals(e.getState()))
&& loginUser.getUsername().equals(e.getDre())).count();
if (count > 0) {
paramsManifestTodoCenterEO.setWaitFillNum(count);
}
}
paramsManifestTodoCenterEOList.add(paramsManifestTodoCenterEO);
}
return paramsManifestTodoCenterEOList;
}
/**
* 根据项目id清单id查询当前登录人的Homo角色
* @param projectId
* @param paramsManifestId
* @return
*/
public List<String> getLoginUserTypes(String projectId, String paramsManifestId, LoginUser loginUser) {
List<String> userTypeList = new ArrayList<>(); // 一个用户可以有多个用户类型
// LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); // 获取当前登录用户
// 查询项目下所有责任领域下的 homo人员
List<ProjectLibraryBase> projectLibraryBaseList = projectLibraryBaseMapper.queryById(projectId);
List<String> homoList = new ArrayList<>();
if (CollectionUtil.isNotEmpty(projectLibraryBaseList)) {
String homoIdStr = projectLibraryBaseList.get(0).getCertificationEngineer();
if (StringUtils.isNotEmpty(homoIdStr)) {
List<String> homoIdList = Arrays.asList(homoIdStr.split(",")).stream().distinct().collect(Collectors.toList());
homoList = sysUserService.listByIds(homoIdList).stream().map(SysUser::getUsername).collect(Collectors.toList());
}
}
// 查询项目下所有责任领域下的 sdt人员
List<String> sdtList = new ArrayList<>();
LambdaQueryWrapper<ProjectRelatedPersonnel> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ProjectRelatedPersonnel::getProjectId, projectId);
List<ProjectRelatedPersonnel> prpList = projectRelatedPersonnelService.list(queryWrapper);
// String homoIdStr = prpList.stream().map(e -> e.getCertificationEngineer()).collect(Collectors.joining(","));
String sdtIdStr = prpList.stream().map(e -> e.getEngineeringInterfacePerson()).collect(Collectors.joining(","));
// 项目下有homo-->不一定有sdt
if(StringUtils.isNotBlank(sdtIdStr)) {
List<String> sdtIdList = Arrays.asList(sdtIdStr.split(",")).stream().distinct().collect(Collectors.toList());
sdtList = sysUserService.listByIds(sdtIdList).stream().map(SysUser::getUsername).collect(Collectors.toList());
}
// 查询项目下参数清单下收集参数项中的 sdt,dre人员
ParamsCollectManifestEO paramsCollectManifestEO = new ParamsCollectManifestEO();
paramsCollectManifestEO.setParamsManifestId(paramsManifestId);
List<ParamsCollectManifestEO> pcmList = paramsCollectManifestEOMapper.listInfo(paramsCollectManifestEO);
List<String> sdtListOfPCM = pcmList.stream()
.filter(e->StringUtils.isNotEmpty(e.getSdt()))
.map(ParamsCollectManifestEO::getSdt)
.distinct()
.collect(Collectors.toList());
sdtList.addAll(sdtListOfPCM); // 需要取并集因为存在参数项开始收集但 人员相关名单中sdt被修改的情况
List<String> dreListOfPCM = pcmList.stream()
.filter(e->StringUtils.isNotEmpty(e.getDre()))
.map(ParamsCollectManifestEO::getDre)
.distinct()
.collect(Collectors.toList());
String loginUserName = loginUser.getUsername().toLowerCase();
homoList = toLowerCaseOfList(homoList);
sdtList = toLowerCaseOfList(sdtList);
dreListOfPCM = toLowerCaseOfList(dreListOfPCM);
if (homoList.contains(loginUserName)) {
userTypeList.add(CollectManifestUserTypeEnum.HOMO.getValue());
}
if (sdtList.contains(loginUserName)) {
userTypeList.add(CollectManifestUserTypeEnum.SDT.getValue());
}
if (dreListOfPCM.contains(loginUserName)) {
userTypeList.add(CollectManifestUserTypeEnum.DRE.getValue());
}
return userTypeList;
}
public String getLoginUserTypeOfHomo(List<ProjectLibraryBase> projectLibraryBaseList, LoginUser loginUser) {
String userType = ""; // 一个用户可以有多个用户类型
// 查询项目下的 homo人员
List<String> homoList = new ArrayList<>();
if (CollectionUtil.isNotEmpty(projectLibraryBaseList)) {
String homoIdStr = projectLibraryBaseList.get(0).getCertificationEngineer();
if (StringUtils.isNotEmpty(homoIdStr)) {
List<String> homoIdList = Arrays.asList(homoIdStr.split(",")).stream().distinct().collect(Collectors.toList());
homoList = sysUserService.listByIds(homoIdList).stream().map(SysUser::getUsername).collect(Collectors.toList());
}
}
String loginUserName = loginUser.getUsername().toLowerCase();
homoList = toLowerCaseOfList(homoList);
if (homoList.contains(loginUserName)) {
userType = CollectManifestUserTypeEnum.HOMO.getValue();
}
return userType;
}
public String getLoginUserTypeOfSdt(List<ParamsCollectManifestEO> pcmList, LoginUser loginUser) {
String userType = ""; // 一个用户可以有多个用户类型
List<String> sdtListOfPCM = pcmList.stream()
.filter(e->StringUtils.isNotEmpty(e.getSdt()))
.map(ParamsCollectManifestEO::getSdt)
.distinct()
.collect(Collectors.toList());
String loginUserName = loginUser.getUsername().toLowerCase();
sdtListOfPCM = toLowerCaseOfList(sdtListOfPCM);
if (sdtListOfPCM.contains(loginUserName)) {
userType = CollectManifestUserTypeEnum.SDT.getValue();
}
return userType;
}
public String getLoginUserTypeOfDre(List<ParamsCollectManifestEO> pcmList, LoginUser loginUser) {
String userType = ""; // 一个用户可以有多个用户类型
List<String> dreListOfPCM = pcmList.stream()
.filter(e->StringUtils.isNotEmpty(e.getDre()))
.map(ParamsCollectManifestEO::getDre)
.distinct()
.collect(Collectors.toList());
String loginUserName = loginUser.getUsername().toLowerCase();
dreListOfPCM = toLowerCaseOfList(dreListOfPCM);
if (dreListOfPCM.contains(loginUserName)) {
userType = CollectManifestUserTypeEnum.DRE.getValue();
}
return userType;
}
private List<String> toLowerCaseOfList(List<String> list) {
List<String> newList = list;
if (CollectionUtil.isNotEmpty(list)) {
newList = list.stream().map(String::toLowerCase).collect(Collectors.toList());
}
return newList;
}
}
@@ -0,0 +1,226 @@
package com.jero.modules.todoCenter.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.jero.common.api.vo.Result;
import com.jero.common.exception.JeroBootException;
import com.jero.modules.project.entity.ProjectLawsInventoryEO;
import com.jero.modules.project.enums.OperatorTypeEnum;
import com.jero.modules.project.enums.RequestSourceEnum;
import com.jero.modules.todoCenter.entity.ProcessInfoDetailEO;
import com.jero.modules.todoCenter.mapper.ProcessInfoDetailEOMapper;
import com.jero.modules.todoCenter.service.IProcessInfoDetailEOService;
import com.jero.modules.wkflow.enums.DesignComplianceNodeEnum;
import com.jero.modules.wkflow.enums.FlowTypeEnum;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Date;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
/**
* @Description: 流程信息明细表
* @Author: jero-boot
* @Date: 2022-10-14
* @Version: V1.0
*/
@Service
@Transactional(value = "transactionManager", readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
public class ProcessInfoDetailEOServiceImpl extends ServiceImpl<ProcessInfoDetailEOMapper, ProcessInfoDetailEO> implements IProcessInfoDetailEOService {
/**
* 保存
*
* @param processInfoDetailEO
* @return
*/
@Override
public void add(ProcessInfoDetailEO processInfoDetailEO) {
Date now = new Date();
processInfoDetailEO.setCreateTime(now);
processInfoDetailEO.setUpdateTime(now);
save(processInfoDetailEO);
}
/**
* 更新
*
* @param processInfoDetailEO
* @return
*/
@Override
public void editById(ProcessInfoDetailEO processInfoDetailEO) {
Date now = new Date();
processInfoDetailEO.setUpdateTime(now);
saveOrUpdate(processInfoDetailEO);
}
/**
* 通过id删除
*
* @param id
* @return
*/
@Override
public void deleteById(String id) {
removeById(id);
}
/**
* 批量删除
*
* @param ids
* @return
*/
@Override
public void deleteByIds(List<String> ids) {
removeByIds(ids);
}
/**
* 通过id查询
*
* @param id
* @return
*/
@Override
public ProcessInfoDetailEO queryById(String id) {
return getById(id);
}
/**
* 列表查询
*
* @return
*/
@Override
public List<ProcessInfoDetailEO> queryList() {
return list();
}
@Override
public Result<?> processCall(JSONObject jsonObject) {
String requestSource = jsonObject.getString("requestSource");
if(StringUtils.isEmpty(requestSource)){
throw new JeroBootException("请求来源不能为空!");
}
if(!StringUtils.equals(requestSource, RequestSourceEnum.WORK_FLOW.getValue())){
throw new JeroBootException("来源有误,没有权限调用该接口!");
}
String operatorType = jsonObject.getString("operatorType");
if(StringUtils.isEmpty(operatorType)){
throw new JeroBootException("操作类型不能为空!");
}
if(StringUtils.equals(operatorType, OperatorTypeEnum.ADD.getValue())){
JSONArray processInfoDetailList = jsonObject.getJSONArray("processInfoDetailList");
ProcessInfoDetailEO processInfoDetailEO = null;
List<ProcessInfoDetailEO> detailEOList = new ArrayList<>();
for (Object processInfoDetail : processInfoDetailList) {
processInfoDetailEO = JSONObject.parseObject(JSONObject.toJSONString(processInfoDetail), ProcessInfoDetailEO.class);
// 当前流程 当前用户 的数据删掉 确保唯一
QueryWrapper<ProcessInfoDetailEO> deleteWrapper = new QueryWrapper<>();
deleteWrapper.lambda().eq(ProcessInfoDetailEO::getActiProcInstId,processInfoDetailEO.getActiProcInstId());
deleteWrapper.lambda().eq(ProcessInfoDetailEO::getUserId,processInfoDetailEO.getUserId());
deleteWrapper.lambda().eq(ProcessInfoDetailEO::getFlowType,processInfoDetailEO.getFlowType());
this.baseMapper.delete(deleteWrapper);
detailEOList.add(processInfoDetailEO);
}
this.saveBatch(detailEOList);
}else if(StringUtils.equals(operatorType, OperatorTypeEnum.UPDATE.getValue())){
ProcessInfoDetailEO processInfoDetailEO = JSONObject.parseObject(jsonObject.toString(), ProcessInfoDetailEO.class);
this.baseMapper.updateById(processInfoDetailEO);
}else if(StringUtils.equals(operatorType, OperatorTypeEnum.QUERY.getValue())){
String userId = jsonObject.getString("userId");
String flowType = jsonObject.getString("flowType");
String actiProcInstId = jsonObject.getString("actiProcInstId");
QueryWrapper<ProcessInfoDetailEO> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(ProcessInfoDetailEO::getUserId,userId);
queryWrapper.lambda().eq(ProcessInfoDetailEO::getFlowType,flowType);
queryWrapper.lambda().eq(ProcessInfoDetailEO::getActiProcInstId,actiProcInstId);
queryWrapper.isNull("task_id");
List<ProcessInfoDetailEO> processInfoDetailEOList = this.baseMapper.selectList(queryWrapper);
Result<List<ProcessInfoDetailEO>> objectResult = new Result<>();
objectResult.setResult(processInfoDetailEOList);
objectResult.setSuccess(true);
return objectResult;
}else if(StringUtils.equals(operatorType, OperatorTypeEnum.UPDATE_PROCESS_INFO_DETAIL_BY_TASK_ID.getValue())){
String taskId = jsonObject.getString("taskId");
String taskStatus = jsonObject.getString("taskStatus");
LambdaUpdateWrapper<ProcessInfoDetailEO> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(ProcessInfoDetailEO::getStatus,taskStatus);
updateWrapper.set(ProcessInfoDetailEO::getSubmitTime,new Date());
updateWrapper.eq(ProcessInfoDetailEO::getTaskId,taskId);
this.update(updateWrapper);
}
return new Result<>().success("调用成功!");
}
@Override
public void batchInsertDreUserTask(List<ProcessInfoDetailEO> processInfoDetailEOList) {
processInfoDetailEOList.forEach(detail -> {
QueryWrapper<ProcessInfoDetailEO> removeWrap = new QueryWrapper<>();
removeWrap.lambda().eq(ProcessInfoDetailEO::getUserId,detail.getUserId());
removeWrap.lambda().eq(ProcessInfoDetailEO::getFlowType,detail.getFlowType());
removeWrap.lambda().eq(ProcessInfoDetailEO::getActiProcInstId,detail.getActiProcInstId());
removeWrap.lambda().eq(ProcessInfoDetailEO::getTaskDefinitionKey,detail.getTaskDefinitionKey());
this.remove(removeWrap);
});
this.saveBatch(processInfoDetailEOList);
}
@Override
public void updateProcessInfoDetailUserId(ProjectLawsInventoryEO projectLawsInventoryEO, String pId, String flowType) {
QueryWrapper<ProcessInfoDetailEO> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(ProcessInfoDetailEO::getActiProcInstId,pId);
queryWrapper.lambda().eq(ProcessInfoDetailEO::getFlowType,flowType);
List<ProcessInfoDetailEO> processInfoDetailEOList = this.list(queryWrapper);
if(CollectionUtils.isNotEmpty(processInfoDetailEOList)){
for (ProcessInfoDetailEO processInfoDetailEO : processInfoDetailEOList) {
if(StringUtils.equals(flowType, FlowTypeEnum.SJFHXSHLC.getValue())){
if(StringUtils.equals(processInfoDetailEO.getTaskDefinitionKey(), DesignComplianceNodeEnum.THE_RESPONSIBLE_PERSON_HANDLES_THE_TASK.getKey())){
//更新责任人的任务
processInfoDetailEO.setUserId(projectLawsInventoryEO.getDesignDutyId());
}
if(StringUtils.equals(processInfoDetailEO.getTaskDefinitionKey(), DesignComplianceNodeEnum.SPONSOR_REVIEW.getKey())){
//更新发起人的任务
processInfoDetailEO.setUserId(projectLawsInventoryEO.getDesignInitiatorId());
}
}
if(StringUtils.equals(flowType, FlowTypeEnum.PREHOMOQRLC.getValue())){
if(StringUtils.equals(processInfoDetailEO.getTaskDefinitionKey(), DesignComplianceNodeEnum.THE_RESPONSIBLE_PERSON_HANDLES_THE_TASK.getKey())){
//更新责任人的任务
processInfoDetailEO.setUserId(projectLawsInventoryEO.getPrehomoDutyId());
}
if(StringUtils.equals(processInfoDetailEO.getTaskDefinitionKey(), DesignComplianceNodeEnum.SPONSOR_REVIEW.getKey())){
//更新发起人的任务
processInfoDetailEO.setUserId(projectLawsInventoryEO.getPrehomoInitiatorId());
}
}
if(StringUtils.equals(flowType,FlowTypeEnum.YZFHXSCLC.getValue())){
if(StringUtils.equals(processInfoDetailEO.getTaskDefinitionKey(), DesignComplianceNodeEnum.THE_RESPONSIBLE_PERSON_HANDLES_THE_TASK.getKey())){
//更新责任人的任务
processInfoDetailEO.setUserId(projectLawsInventoryEO.getVerifyDutyId());
}
if(StringUtils.equals(processInfoDetailEO.getTaskDefinitionKey(), DesignComplianceNodeEnum.SPONSOR_REVIEW.getKey())){
//更新发起人的任务
processInfoDetailEO.setUserId(projectLawsInventoryEO.getVerifyInitiatorId());
}
}
this.baseMapper.updateById(processInfoDetailEO);
}
}
}
}
@@ -0,0 +1,45 @@
package com.jero.modules.todoCenter.vo;
import lombok.Data;
@Data
public class ParamsManifestTodoCenterEOPage {
/**
* 参数清单id
*/
private String id;
/**
* 相关项目名称
*/
private String projectName;
/**
* 参数清单标题
*/
private String title;
/**
* 相关项目版本
*/
private String projectVersion;
/**
* 待发起数量 包括状态待发起收集,变更,工程接口人退回
*/
private Integer waitCollectNum;
/**
* 待工程接口人处理数量即待分配 包括状态待工程接口人处理,填写人退回
*/
private Integer waitSdtNum;
/**
* 待填写数量 包括状态待填写,认证工程师退回
*/
private Integer waitFillNum;
private int pageNo;
private int pageSize;
private String state;
}
@@ -0,0 +1,110 @@
package com.jero.modules.todoCenter.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
/**
* 流程信息表VO类
*/
@Data
public class ProcessInfoVO implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
private String id;
/**创建人*/
private String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date createTime;
/**更新人*/
private String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date updateTime;
/**所属部门*/
private String sysOrgCode;
/**项目库id*/
private String projectLibraryId;
/**法规清单id*/
private String projectLawsInventoryId;
/**文档库id/标准id*/
private String bussDocumentLibraryId;
/**流程实例id*/
private String actiProcInstId;
/**流程类型*/
private String flowType;
/**截止日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
private java.util.Date endTime;
/**任务状态*/
private String status;
/**流程编号**/
private String prcNum;
/**流程名称*/
private String prcName;
/**流程类型展示字段*/
private String flowTypeShow;
/**任务状态展示字段*/
private String statusShow;
/**上一个操作人 用户id*/
private String lastAssignee;
private String lastAssigneeName;
/**当前操作人/代理人 用户id*/
private String assignee;
private String assigneeName;
/**标准编号*/
private String serialNumber;
/**标准标题-中文*/
private String title;
/**标准标题-英文*/
private String titleEn;
/**项目名称*/
private String projectName;
/**年份*/
private String yearName;
/**待办id*/
private String taskId;
/**任务节点定义key*/
private String taskDefinitionKey;
/**项目名称id*/
private String projectNameId;
/**目标市场*/
private String targetMarket;
/**studio*/
private String studioEngineer;
/**任务清单明细表id,任务清单明细数据与待办中心明细表 是taskId一对一的关系**/
private String primaryKeyId;
/**符合性流程:责任人填写反馈意见*/
private String personChargeFeedback;
/**截止日期 过期标识:true为已经过期 false为没有过期**/
private boolean endTimePastDueFlag = false;
/**标准信息**/
private String standardInfo;
}
@@ -13,6 +13,7 @@ import com.jero.modules.document.enums.FieldTypeEnum;
import com.jero.modules.document.mapper.BussDocumentLibraryEOMapper;
import com.jero.modules.document.service.impl.BussDocumentLibraryEOServiceImpl;
import com.jero.modules.feishu.service.IFeishuService;
import com.jero.modules.feishu.vo.FeishuMsgVo;
import com.jero.modules.system.entity.SysAnnouncement;
import com.jero.modules.system.entity.SysCategory;
import com.jero.modules.system.entity.SysDictItem;
@@ -425,12 +426,17 @@ public class LawsWarnService {
bussDocumentLibraryEOService.sendWebsocket(StringUtils.join(thirdIdList, ","), contentInfo);
//飞书
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for (String s : urlList) {
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
String encode = UriEncoder.encode(s);
List<String> list = new ArrayList<>();
mapList.stream().forEach(e->{
if(s.contains((String)e.get("id"))){
String serialNumber = StringUtils.valueOf(e.get("serial_number"));
//封装飞书消息实体类
setFeishuMsgVo(sysUser, sdf, feishuMsgVo, encode, e, serialNumber);
String timeContent = "";
if("1".equals(flag)){
String value = StringUtils.valueOf(e.get("xin1_che1_xing2_shi2_shi1_ri4_qi1"));
@@ -452,8 +458,11 @@ public class LawsWarnService {
list.add(serialNumber + timeContent);
}
});
String contentTemp = sysUser.getUsername() + " has pushed " + StringUtils.join(list, ",") + ", Please be reminded to check it out.";
iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), contentTemp, MessageTypeEnum.PUSH.getName(), encode);
iFeishuService.sendCardMsgWarn(thirdIdList.toArray(new String[]{}), feishuMsgVo);
// String contentTemp = sysUser.getUsername() + " has pushed " + StringUtils.join(list, ",") + ", Please be reminded to check it out.";
// iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), contentTemp, MessageTypeEnum.PUSH.getName(), encode);
}
} catch (IOException e) {
e.printStackTrace();
@@ -461,6 +470,38 @@ public class LawsWarnService {
bussDocumentLibraryEOService.sendWebsocket(documentIds, contentInfo);
return "推送成功";
}
private void setFeishuMsgVo(LoginUser sysUser, SimpleDateFormat sdf, FeishuMsgVo feishuMsgVo, String encode, Map<String, Object> e, String serialNumber) {
String documentTitleCn = ""; //文档标题
String documentTitleEn = ""; //文档标题
String newTypeExecutionDate = ""; //新车型实施日期
String newVehicleExecutionDate = ""; //在产车实施日期
if(ObjectUtils.isNotEmpty(e.get("title"))){
documentTitleCn = String.valueOf(e.get("title"));
}
if(ObjectUtils.isNotEmpty(e.get("title_en"))){
documentTitleEn = String.valueOf(e.get("title_en"));
}
if(ObjectUtils.isNotEmpty(e.get("xin1_che1_xing2_shi2_shi1_ri4_qi1"))){
newTypeExecutionDate = sdf.format(e.get("xin1_che1_xing2_shi2_shi1_ri4_qi1"));
}
if(ObjectUtils.isNotEmpty(e.get("implement_time"))){
newVehicleExecutionDate = sdf.format(e.get("implement_time"));
}
String contentInfoFei = sysUser.getUsername() +" shared Regulation Early Warning infomation with you.";
String contentInfoFeiCn = sysUser.getUsername() +"向您分享了法规预警信息.";
feishuMsgVo.setTitle(MessageTypeEnum.WARN.getNameCn()+"/"+MessageTypeEnum.WARN.getName());
feishuMsgVo.setUrl(encode);
feishuMsgVo.setContentEn(contentInfoFei);
feishuMsgVo.setContent(contentInfoFeiCn);
feishuMsgVo.setRegulationNo(serialNumber);
feishuMsgVo.setNewTypeExecutionDate(newTypeExecutionDate);
feishuMsgVo.setNewVehicleExecutionDate(newVehicleExecutionDate);
feishuMsgVo.setDocumentTitleCn(documentTitleCn);
feishuMsgVo.setDocumentTitleEn(documentTitleEn);
}
// public String warnPullMessage(String departIds, String userIds, String documentIds,String flag) {
// Set<String> allDepartIds = new HashSet<>();
// //查询当前部门下所有部门
@@ -1,16 +1,21 @@
package com.jero.modules.wkflow.enums;
import com.jero.common.constant.enums.CutEnum;
import com.jero.modules.todoCenter.enums.TodoCenterStatusEnum;
import org.apache.commons.lang3.StringUtils;
/**
* 流程类型枚举类
*/
public enum FlowTypeEnum {
RWQRLC("1","任务确认流程","RWQRLC","任务确认流程","rwqrlc"),
SJFHXSHLC("2","设计符合性审查流程","SJFHXSHLC","设计符合性审查流程","sjfhxlc"),
PREHOMOQRLC("3","prehomo确认流程","PREHOMOQRLC","prehomo确认流程","prehomoqrlc"),
YZFHXSCLC("4","验证符合性审查流程","YZFHXSCLC","验证符合性审查流程","yzfhxsclc"),
FGYJSJLC("5","法规意见收集流程","FGYJSJLC","法规意见收集流程","fgyjsjlc"),
FGJSPG("6","法规技术评估","FGJSPG","法规技术评估流程","fgjspglc"),
RWQRLC("1","任务确认流程","RWQRLC","任务确认流程","rwqrlc","清单任务确认","List task Confirmation"),
SJFHXSHLC("2","设计符合性审查流程","SJFHXSHLC","设计符合性审查流程","sjfhxlc","设计符合性确认","Design conformance verification"),
PREHOMOQRLC("3","prehomo确认流程","PREHOMOQRLC","prehomo确认流程","prehomoqrlc","Pre-Homo确认","The Pre - Homo confirmation"),
YZFHXSCLC("4","验证符合性审查流程","YZFHXSCLC","验证符合性审查流程","yzfhxsclc","验证符合性确认","Verify conformance confirmation"),
FGYJSJLC("5","法规意见收集流程","FGYJSJLC","法规意见收集流程","fgyjsjlc","法规意见收集","Collection of Legislative Comments"),
FGJSPG("6","法规技术评估流程","FGJSPG","法规技术评估流程","fgjspglc","法规技术评估","Regulatory and technical assessment"),
QDQR("10","清单确认","QDQR","清单确认流程","qdqr","法规清单确认","Regulation list confirmation"),
;
private String value;
@@ -18,13 +23,17 @@ public enum FlowTypeEnum {
private String prcNum;
private String prcName;
private String processDefinitionKey;
private String cnName;
private String enName;
private FlowTypeEnum(String value, String lable, String prcNum, String prcName, String processDefinitionKey) {
private FlowTypeEnum(String value, String lable, String prcNum, String prcName, String processDefinitionKey,String cnName,String enName) {
this.value = value;
this.lable = lable;
this.prcNum = prcNum;
this.prcName = prcName;
this.processDefinitionKey = processDefinitionKey;
this.cnName = cnName;
this.enName = enName;
}
public String getValue() {
return value;
@@ -43,4 +52,26 @@ public enum FlowTypeEnum {
public String getProcessDefinitionKey() {
return processDefinitionKey;
}
public String getCnName() {
return cnName;
}
public String getEnName() {
return enName;
}
public static String getTextByValue(String value, String cut) {
FlowTypeEnum[] values = values();
for (FlowTypeEnum flowTypeEnum : values) {
if (flowTypeEnum.value.equals(value)) {
if(StringUtils.equals(cut, CutEnum.CN.getValue())){
return flowTypeEnum.cnName;
}else if(StringUtils.equals(cut,CutEnum.EN.getValue())){
return flowTypeEnum.enName;
}
}
}
return null;
}
}
@@ -181,4 +181,21 @@ public interface WorkFlowFeignClient {
@RequestMapping(value = "/bat-wkflow/deleteProcessInstanceByPrcIds",method = RequestMethod.GET)
Result<String> deleteProcessInstanceByPrcIds(@RequestParam("prcIds") String prcIds);
@RequestMapping(value = "/bat-wkflow/task/getLawsOpinionGatherPrcInfo",method = RequestMethod.GET)
Map<String,String> getLawsOpinionGatherPrcInfo(@RequestParam("lawsOpinionGatherId") String lawsOpinionGatherId);
/**
* 根据流程类型查询未完成的流程信息
* @param prcType
* @return
*/
@RequestMapping(value = "/bat-wkflow/datas/bus-process-name/queryProcessInfoByPrcType",method = RequestMethod.GET)
List<Map<String, Object>> queryProcessInfoByPrcType(@RequestParam("prcType") String prcType);
/**
* 处理历史数据-之前的数据发起的时候在busProcessNew中没有待办信息
*/
@RequestMapping(value = "/bat-wkflow/datas/bus-process-new/dispostHistoryBusProcessNewData",method = RequestMethod.GET)
Result dispostHistoryBusProcessNewData();
}
@@ -196,4 +196,20 @@ public class WorkFlowFeignClientImpl{
public Result<String> deleteProcessInstanceByTaskId(@RequestParam("taskId")String taskId){
return workFlowFeignClient.deleteProcessInstance(taskId);
}
/**
* 根据流程类型查询未完成的流程信息
* @param prcType
* @return
*/
public List<Map<String, Object>> queryProcessInfoByPrcType(String prcType) {
return workFlowFeignClient.queryProcessInfoByPrcType(prcType);
}
/**
* 处理历史数据-之前的数据发起的时候在busProcessNew中没有待办信息
*/
public Result dispostHistoryBusProcessNewData() {
return workFlowFeignClient.dispostHistoryBusProcessNewData();
}
}
@@ -11,6 +11,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.Environment;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
import java.net.InetAddress;
@@ -25,6 +26,7 @@ import java.net.UnknownHostException;
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@EnableScheduling
public class LawNioApplication extends SpringBootServletInitializer {
@Override
Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

+22
View File
@@ -1337,4 +1337,26 @@ module.exports = {
Topping:'Topping',
cancelTopping:'Cancel Topping',
relatedProjectVersion:'Related project version',
taskType:'Task Type',
taskStatus:'Task Status',
taskConfirmationHandling:'Task confirmation handling',
relatedVersion:'Related version',
filledBy:'Filled by',
parameterToBeInitiated:'Parameter to be initiated',
listTaskConfirmation:'List task confirmation',
completednum: 'Quantity to be filled',
filledBynum:'Filled by',
parameterToBeInitiatednum:'Parameter to be initiated',
listToConfirm:'List to confirm',
toSubmit:'To submit',
toAudit:'To audit',
secondaryDirectory:'Secondary Directory',
OnlyPersonsCanBeSelected:'The maximum upper limit is exceeded; Only 100 persons can be selected',
projectVersion:'Project Version',
softwareVersion:'Authentication Software version',
versionStatistics:'Version statistics',
addSubproject:'Add Subproject',
Topping:'Topping',
cancelTopping:'Cancel Topping',
relatedProjectVersion:'Related project version',
}
+24 -2
View File
@@ -516,8 +516,8 @@ module.exports = {
AddProcess: '添加流程',
RelatedItems: '相关项目',
Sponsor: '发起人',
CurrentProcessor: '当前处理',
LastProcessor: '上一处理',
CurrentProcessor: '当前操作',
LastProcessor: '上一操作',
ProcessingTime: '办理时间',
cutoffTime: '截止时间',
ProcessStatus: '流程状态',
@@ -1438,4 +1438,26 @@ module.exports = {
Topping:'置顶',
cancelTopping:'取消置顶',
relatedProjectVersion:'相关项目版本',
taskType:'任务类型',
taskStatus:'任务状态',
taskConfirmationHandling:'任务确认办理',
relatedVersion:'相关版本',
filledBy:'待分配填写人',
parameterToBeInitiated:'参数待发起',
listTaskConfirmation:'清单任务确认',
completednum: '待填写',
filledBynum:'待分配填写人',
parameterToBeInitiatednum:'参数待发起',
listToConfirm:'待确认',
toSubmit:'待提交',
toAudit:'待审核',
secondaryDirectory:'二级目录',
OnlyPersonsCanBeSelected:'超出最大上限最多只能选择100个人员',
projectVersion:'项目版本',
softwareVersion:'认证软件版本',
versionStatistics:'版本统计',
addSubproject:'添加子项目',
Topping:'置顶',
cancelTopping:'取消置顶',
relatedProjectVersion:'相关项目版本',
}
+6 -3
View File
@@ -109,8 +109,10 @@ export default {
props = { to: { path: menu.path } }
}
const attrs = { href: menu.path, target: menu.meta.target , title:menu.meta.title }
const attrs = { href: menu.path, target: menu.meta.target, title: menu.meta.title }
if (menu.meta && menu.meta.existTask) {
attrs.style = 'color:red'
}
if (menu.children && menu.alwaysShow) {
// 把有子菜单的 并且 父菜单是要隐藏子菜单的
// 都给子菜单增加一个 hidden 属性
@@ -162,7 +164,8 @@ export default {
span
slot = 'title' >
{ this.renderIcon(menu.meta.icon) }
< span title={menu.meta.title}> { menu.meta.title } < /span>
< span
title = { menu.meta.title } > { menu.meta.title } < /span>
< /span>
{
itemArr
@@ -19,12 +19,16 @@
<span slot="titleName" slot-scope="text,record" :title="text">
{{ text }}
</span>
<span slot="paramsName" slot-scope="text,record">
<span class="textName" :title="text">{{text}}</span>
</span>
<div :slot="'titleName'+(index+1)" v-for="(item,index) in content">
<span v-if='item.isLock == 1' style='padding-right: 20px'><a-icon type="lock" theme="twoTone" two-tone-color="#00B3BE" /></span>
<span v-if='item.isLock == 1' style='padding-right: 20px'><a-icon type="lock" theme="twoTone"
two-tone-color="#00B3BE"/></span>
<span style='padding-right: 10px'>{{ item.db_field_txt }} </span>
<a-button @click='onClickSee(item)'>{{$t('See')}}</a-button>
</div>
<!-- {{ text && text.length > 8 ? text.slice(0, 7) + '...' : text }}-->
<!-- {{ text && text.length > 8 ? text.slice(0, 7) + '...' : text }}-->
<span slot="ParameterDescription" slot-scope="text,record" :title="text">
<a-button @click='onClickTitle(record)'>{{$t('See')}}</a-button>
@@ -55,7 +59,7 @@
<span
v-if='record.state == "待发起收集" || record.state == "工程接口人退回" || record.state == "To be collected" || record.state == "Rejected by eng. interface"'>
<span :title='record.dataValue'
@click='ondataValueTobe(record)'>{{ (record.dataValue == null || record.dataValue == 'undefined')? '--': record.dataValue }}</span>
@click='ondataValueTobe(record)'>{{ (record.dataValue == null || record.dataValue == 'undefined')? '--': record.dataValue }}</span>
</span>
<span v-else>
<span :title='record.dataValue' @click='dataValueTobe(record)'>{{ (record.dataValue == null || record.dataValue == 'undefined')? '--': record.dataValue }}</span>
@@ -135,14 +139,14 @@
<a-row :gutter='24'>
<a-col :span='24'>
<a-form-model-item ref='region' :label="$t('areaOfResponsibility')" prop='queryzr'>
<!-- <a-select allowClear :placeholder="$t('PleaseSelect')+$t('engineeringInterfacePerson')"-->
<!-- v-model="Dateline.querySdt">-->
<!-- <a-select-option v-for="(item, key) in querySdtList" :key="key" :value="item.value">-->
<!-- <span style="display: inline-block;width: 100%" :title=" item.label ">-->
<!-- {{ item.label }}-->
<!-- </span>-->
<!-- </a-select-option>-->
<!-- </a-select>-->
<!-- <a-select allowClear :placeholder="$t('PleaseSelect')+$t('engineeringInterfacePerson')"-->
<!-- v-model="Dateline.querySdt">-->
<!-- <a-select-option v-for="(item, key) in querySdtList" :key="key" :value="item.value">-->
<!-- <span style="display: inline-block;width: 100%" :title=" item.label ">-->
<!-- {{ item.label }}-->
<!-- </span>-->
<!-- </a-select-option>-->
<!-- </a-select>-->
<j-dict-select-tag class="box-input" v-model="Dateline.queryzr"
@input="handleInput('queryzr')"
:placeholder="$t('PleaseSelect')+$t('areaOfResponsibility')"
@@ -155,7 +159,8 @@
<div class="imports-footer">
<div class="imports-footer-wrap">
<a-button class="imports-btn imports-sub" :loading="confirmLoading" type="primary" @click="handleSubmitzr">{{$t('preservation')}}
<a-button class="imports-btn imports-sub" :loading="confirmLoading" type="primary" @click="handleSubmitzr">
{{$t('preservation')}}
</a-button>
<a-button class="imports-btn" type="primary" @click="cancel">{{$t('cancel')}}</a-button>
</div>
@@ -235,7 +240,7 @@
default: {},
require: true
},
description:'',
description: '',
formInline: {
type: Object,
default: true
@@ -300,7 +305,7 @@
indeterminate: false,
columns: [],
content: [],
confirmLoading:false,
confirmLoading: false,
selectedRowKeys: [],
selectedRowrowValue: [],
dataSource: [],
@@ -316,7 +321,7 @@
sdt: 0, // 工程接口人
dre: 0, // 填写人
areaVisible: false,
areaVisiblezr:false,
areaVisiblezr: false,
form: {},
rules: {
querySdt: [
@@ -342,13 +347,13 @@
xs: { span: 24 },
sm: { span: 7 }
},
queryParamQuery:{},
queryParam:{},
queryParamQuery: {},
queryParam: {},
querySdtList: [], // 工程接口人
Dateline: {},
getquerySdtId: '', // 当前工程接口人的id
areaVisibleView: false, // 查看配置得弹框
seeVisibleView:false,
seeVisibleView: false,
configDetail: {} // 查看配置得详细信息
}
},
@@ -394,7 +399,7 @@
this.$emit('handlePreservation')
this.getTableList()
},
onClickTitle(val){
onClickTitle(val) {
console.log(val)
this.description = val.description
this.seeVisibleView = true
@@ -455,7 +460,11 @@
// 责任领域 保存
handleSubmitzr(record) {
let _this = this
let param = { dutyTerritory: this.Dateline.queryzr, ids: this.getquerySdtId,paramsManifestId: this.$route.query.id, }
let param = {
dutyTerritory: this.Dateline.queryzr,
ids: this.getquerySdtId,
paramsManifestId: this.$route.query.id
}
this.$refs.ruleFormOne.validate(valid => {
if (valid) {
this.confirmLoading = true
@@ -538,7 +547,7 @@
this.areaVisible = false
this.$refs['ruleForm'].resetFields()
},
cancel(){
cancel() {
this.areaVisiblezr = false
this.$refs['ruleFormOne'].resetFields()
},
@@ -597,7 +606,7 @@
}
getAction('/params/userTypeLog/queryCurrentType', query).then((res) => {
if (res.success) {
this.queryParamQuery = {...this.queryParamQuery}
this.queryParamQuery = { ...this.queryParamQuery }
if (res.result && res.result.userType) {
if (!(result.some(val => val.value == res.result.userType))) {
@@ -631,7 +640,7 @@
let params = {
paramsManifestId: paramsManifestid,
flag: '7',
userType:userType,
userType: userType
}
getAction(url, params).then((res) => {
if (res.success) {
@@ -662,25 +671,27 @@
dataIndex: res.db_field_name,
align: 'center',
// ellipsis: true,
fixed: res.click5?'left':'',
fixed: res.click5 ? 'left' : '',
sorter: res.sort,
width: 160
})
console.log(res)
this.columns[index].scopedSlots = {
customRender: 'titleName'
}
if(res.click1){
if (res.db_field_name == 'nioNumber') {
this.columns[index].width = 100
}
if (res.click1) {
this.columns[index].scopedSlots = {
customRender: 'operationzr'
}
}
if(res.click2){
if (res.click2) {
this.columns[index].scopedSlots = {
customRender: 'ParameterDescription'
}
}
if(res.click3){
if (res.click3) {
this.columns[index].scopedSlots = {
customRender: 'paramsNameDescription'
}
@@ -691,6 +702,12 @@
customRender: 'operationbtn'
}
}
if (res.db_field_name == 'paramsName') {
this.columns[index].width = 300
this.columns[index].scopedSlots = {
customRender: 'paramsName'
}
}
}
})
this.columns = [...this.columns]
@@ -707,7 +724,7 @@
let params = {
paramsManifestId: this.$route.query.id,
pageNo: this.pageNo,
pageSize: this.pageSize,
pageSize: this.pageSize
// userTypes: this.currentPersonRole
}
let url
@@ -812,7 +829,7 @@
// })
let tt = []
if (this.currentPersonRole !== 'dre') {
console.log(res.result.records,'res.result.records')
console.log(res.result.records, 'res.result.records')
res.result.records.forEach((Obj) => {
Object.keys(Obj).forEach((item) => {
if (Obj[item] instanceof Object && Obj[item].controlType !== undefined) {
@@ -912,6 +929,7 @@
border: none !important;
padding: 0 !important;
}
//::v-deep .ant-table-row:first-child {
// background: #fff!important;
// /*opacity: 0.9;*/
@@ -952,6 +970,7 @@
font-weight: 400;
}
}
.textfield {
width: 100%;
margin-bottom: 8px;
@@ -981,6 +1000,19 @@
}
}
}
.textName {
width: 100%;
overflow: hidden;
display: -webkit-box;
text-overflow: ellipsis;
/*! autoprefixer: off */
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
/*! autoprefixer: on;*/
text-justify: inter-ideograph;
word-break: break-all
}
</style>
<style>
.resize-table-th {
@@ -1001,7 +1033,7 @@
}
.rowClassRed {
background: #f3d9de ;
background: #f3d9de;
}
.rowClassRedYellow {
@@ -28,22 +28,25 @@
<a-button @click='onClickTitle(record)'>{{$t('See')}}</a-button>
</span>
<!-- <span slot="operationbtn" slot-scope="record">-->
<!-- <span v-if='currentPersonRole === "homo"'>-->
<!--&lt;!&ndash; 认证工程师 &ndash;&gt;-->
<!-- <span-->
<!-- v-if='record.state == "待发起收集" || record.state == "工程接口人退回" || record.state == "变更" || record.state == "Wait Collect" || record.state == "Sdt Back" || record.state == "Change"'>-->
<!--&lt;!&ndash; <span&ndash;&gt;-->
<!--&lt;!&ndash; @click='ondataValueTobeinitiated(record)'>{{ (record.dataValue == null || record.dataValue == 'undefined')? '&#45;&#45;': record.dataValue}}</span>&ndash;&gt;-->
<!-- </span>-->
<!-- <span v-else>-->
<!-- <span @click='dataValueTobeinitiated(record)'>{{ (record.dataValue == null || record.dataValue == 'undefined')? '&#45;&#45;': record.dataValue}}</span>-->
<!-- </span>-->
<!-- </span>-->
<!-- <span v-else>-->
<!-- <span @click='dataValueTobeinitiated(record)'>{{ (record.dataValue == null || record.dataValue == 'undefined')? '&#45;&#45;': record.dataValue}}</span>-->
<!-- </span>-->
<!-- </span>-->
<span slot="paramsName" slot-scope="text,record">
<span class="textName" :title="text">{{text}}</span>
</span>
<!-- <span slot="operationbtn" slot-scope="record">-->
<!-- <span v-if='currentPersonRole === "homo"'>-->
<!--&lt;!&ndash; 认证工程师 &ndash;&gt;-->
<!-- <span-->
<!-- v-if='record.state == "待发起收集" || record.state == "工程接口人退回" || record.state == "变更" || record.state == "Wait Collect" || record.state == "Sdt Back" || record.state == "Change"'>-->
<!--&lt;!&ndash; <span&ndash;&gt;-->
<!--&lt;!&ndash; @click='ondataValueTobeinitiated(record)'>{{ (record.dataValue == null || record.dataValue == 'undefined')? '&#45;&#45;': record.dataValue}}</span>&ndash;&gt;-->
<!-- </span>-->
<!-- <span v-else>-->
<!-- <span @click='dataValueTobeinitiated(record)'>{{ (record.dataValue == null || record.dataValue == 'undefined')? '&#45;&#45;': record.dataValue}}</span>-->
<!-- </span>-->
<!-- </span>-->
<!-- <span v-else>-->
<!-- <span @click='dataValueTobeinitiated(record)'>{{ (record.dataValue == null || record.dataValue == 'undefined')? '&#45;&#45;': record.dataValue}}</span>-->
<!-- </span>-->
<!-- </span>-->
<span slot="detailClick" slot-scope="text,record">
<collection-type :detailDate='text'/>
</span>
@@ -99,7 +102,8 @@
</div>
</a-modal>
<!-- 配置信息--->
<a-modal v-model="areaVisibleView" :title="$t('configurationInformation')" width='550px' :footer="null" @cancel="hideModal">
<a-modal v-model="areaVisibleView" :title="$t('configurationInformation')" width='550px' :footer="null"
@cancel="hideModal">
<div class="content-text">
<div class="text-field">
<span class="text-field-left" :title="$t('configurationName')">{{$t('configurationName')}}:</span>
@@ -246,7 +250,7 @@
sdt: 0, // 工程接口人
dre: 0, // 填写人
areaVisible: false,
seeVisibleView:false,
seeVisibleView: false,
form: {},
rules: {
querySdt: [
@@ -293,7 +297,7 @@
return 'rowClassRed'
}
},
onClickTitle(val){
onClickTitle(val) {
console.log(val)
this.description = val.description
this.seeVisibleView = true
@@ -310,7 +314,7 @@
// this.$emit('handlePreservation')
this.getTableList()
},
hideModal(){
hideModal() {
this.areaVisibleView = false
},
// 查看配置详细信息
@@ -507,17 +511,27 @@
this.columns[index].scopedSlots = {
customRender: 'titleName'
}
if (res.db_field_name == 'nioNumber') {
this.columns[index].width = 100
}
if (res.click) {
// 工程接口人列表修改
this.columns[index].scopedSlots = {
customRender: 'operationbtn'
}
}
if(res.click2){
if (res.click2) {
this.columns[index].scopedSlots = {
customRender: 'ParameterDescription'
}
}
if (res.db_field_name == 'paramsName') {
this.columns[index].width = 300
this.columns[index].ellipsis = false
this.columns[index].scopedSlots = {
customRender: 'paramsName'
}
}
}
})
this.columns = [...this.columns]
@@ -532,8 +546,8 @@
let params = {
paramsManifestId: this.$route.query.id,
userTypes: this.currentPersonRole,
pageNo:this.pageNo,
pageSize:this.pageSize
pageNo: this.pageNo,
pageSize: this.pageSize
}
this.loading = true
this.$emit('listReset', '')
@@ -723,14 +737,16 @@
border: none !important;
padding: 0 !important;
}
::v-deep .ant-table-row:first-child {
background: #fff!important;
background: #fff !important;
opacity: 0.9;
}
::v-deep .ant-table-body {
background: transparent!important;
background: transparent !important;
}
.textfield {
width: 100%;
margin-bottom: 8px;
@@ -759,6 +775,7 @@
font-weight: 400;
}
}
.content-text {
width: 100%;
display: flex;
@@ -791,6 +808,19 @@
}
}
}
.textName {
width: 100%;
overflow: hidden;
display: -webkit-box;
text-overflow: ellipsis;
/*! autoprefixer: off */
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
/*! autoprefixer: on;*/
text-justify: inter-ideograph;
word-break: break-all
}
</style>
<style>
.resize-table-th {
+11 -3
View File
@@ -15,7 +15,7 @@
<a-list-item :key="index" v-for="(record, index) in announcement1" v-if="index <= 4">
<div style="margin-left: 5%;width: 80%;">
<p style="overflow: hidden; text-overflow: ellipsis;white-space: nowrap;color:#00B3BE">
<a :title="record.titile" @click="showAnnouncement(record)">{{ record.titile }}</a>
<a :title="record.msgContent" @click="showAnnouncement(record)">{{ record.msgContent }}</a>
</p>
</div>
</a-list-item>
@@ -110,6 +110,11 @@
// clearInterval(this.timer)
// },
methods: {
getText(str) {
let words = str.replace(/<[^<>]+>/g, '').replace(/&nbsp;/gi, '') //这里是去除标签
//.replace(/\s/g, '') //这里是去除空格
return words
},
loadData() {
getAction(this.url.listCementByUser).then((res) => {
if (res.success) {
@@ -134,9 +139,12 @@
showAnnouncement(record) {
getAction(this.url.readAllMsg, { ids: record.id }).then((res) => {
})
localStorage.setItem('msgContent', record.msgContent)
this.$router.push({
path: '/system/MessageDetails',
query: record
path: '/isps/userAnnouncement',
query: {
Date: Date.now()
}
})
},
toMyAnnouncement() {
@@ -604,7 +604,7 @@
this.formInline[this.uploadName] = attIdList.join(',')
this.formInline = { ...this.formInline }
},
tempSaveClick(){
tempSaveClick() {
},
submit(releaseStatus) {
@@ -845,10 +845,15 @@
.box-input-index {
width: calc(100% - 130px);
display: inline-block;
height: 38px;
height: 48px;
margin-right: 10px;
}
::v-deep .box-input-index .ant-select-selection--multiple::-webkit-scrollbar {
/*height: 52px!important;*/
display: block;
}
.itemOption {
display: inline-block;
width: 100%;
@@ -96,9 +96,13 @@
{{item.standNumber}}
</div>
<div class="content-box-button-text" v-if="item.targetMarket_dicText">
<a-icon type="idcard"/>
<img src="../../../../assets/ditu.png" style="width: 15px;margin-top: -3px" alt="">
{{item.targetMarket_dicText}}
</div>
<div class="content-box-button-text" v-if="item.showPermissions_dicText">
<a-icon type="eye" />
{{item.showPermissions_dicText}}
</div>
<div class="content-box-button-text">
<a-icon type="history"/>
{{item.createTime}}
@@ -38,9 +38,13 @@
{{queryForm.standNumber}}
</div>
<div class="content-box-button-text" v-if="queryForm.targetMarket_dicText">
<a-icon type="idcard"/>
<img src="../../../../assets/ditu.png" style="width: 15px;margin-top: -3px" alt="">
{{queryForm.targetMarket_dicText}}
</div>
<div class="content-box-button-text" v-if="queryForm.showPermissions_dicText">
<a-icon type="eye" />
{{queryForm.showPermissions_dicText}}
</div>
<div class="content-box-button-text">
<a-icon type="history"/>
{{queryForm.createTime}}
@@ -65,6 +65,9 @@
<div class="text-content">
{{item.contentOne}}
</div>
<div class="text-text-right-text-Two">
{{item.showPermissions_dicText}}
</div>
<div class="text-text-right-text-One">
{{item.releaseStatus == 'Draft'?$t('draft'):$t('HaveReleased')}}
</div>
@@ -322,11 +325,21 @@
.text-text-right {
padding: 19px 19px;
width: calc(100% - 300px);
width: calc(100% - 420px);
box-sizing: border-box;
/*margin-left: 38px;*/
}
.text-text-right-text-Two {
width: 120px;
height: 100%;
text-align: center;
position: absolute;
right: 300px;
top: 50%;
transform: translate-Y(-50%);
}
.text-text-right-text-One {
width: 120px;
height: 100%;
@@ -92,14 +92,14 @@
@click="viewClick(record)">
{{$t('view')}}
</a>
<!-- v-if="record.createBy == userData.username || administrators"-->
<a class="text-operation"
v-if="record.createBy == userData.username || administrators"
v-has="'monthlyReportFilling:edit'"
@click="edit(record)">
{{$t('edit')}}
</a>
<!-- v-if="record.createBy == userData.username || administrators"-->
<a class="text-operation"
v-if="record.createBy == userData.username || administrators"
v-has="'monthlyReportFilling:delete'"
@click="deleteLib(record)">
{{$t('deleteLib')}}
@@ -9,10 +9,14 @@
:title="$t('title')">{{$t('title')}}</span>
</div>
<a-form-model-item class="itemModel" prop="titleCn">
<a-input class="box-input"
:disabled="disabled"
v-model.trim="formInline.titleCn"
:placeholder="$t('PleaseEnter')+$t('title')"/>
<a-textarea
:disabled="disabled"
:placeholder="$t('PleaseEnter')+$t('title')"
v-model.trim="formInline.titleCn" :rows="3"/>
<!-- <a-input class="box-input"-->
<!-- :disabled="disabled"-->
<!-- v-model.trim="formInline.titleCn"-->
<!-- :placeholder="$t('PleaseEnter')+$t('title')"/>-->
</a-form-model-item>
</div>
</a-col>
@@ -24,10 +28,14 @@
:title="$t('englishTitle')">{{$t('englishTitle')}}</span>
</div>
<a-form-model-item class="itemModel" prop="titleEn">
<a-input class="box-input"
:disabled="disabled"
v-model.trim="formInline.titleEn"
:placeholder="$t('PleaseEnter')+$t('englishTitle')"/>
<a-textarea
:disabled="disabled"
:placeholder="$t('PleaseEnter')+$t('englishTitle')"
v-model.trim="formInline.titleEn" :rows="3"/>
<!-- <a-input class="box-input"-->
<!-- :disabled="disabled"-->
<!-- v-model.trim="formInline.titleEn"-->
<!-- :placeholder="$t('PleaseEnter')+$t('englishTitle')"/>-->
</a-form-model-item>
</div>
</a-col>
@@ -115,7 +123,7 @@
:disabled="disabled"
:placeholder="$t('PleaseSelect')+$t('status')"
:type="'radio'"
:triggerChange="false" :dictCode="'state'"/>
:triggerChange="false" :dictCode="'fa3_gui1_yue4_bao4_tian2_xie3_-_-_zhuang4_tai4'"/>
</a-form-model-item>
</div>
</a-col>
@@ -156,7 +164,7 @@
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text"
:title="$t('ImplementationDate')">{{$t('ImplementationDate')}}</span>
:title="$t('releaseDate')">{{$t('releaseDate')}}</span>
</div>
<a-form-model-item class="itemModel" prop="newCarImplementTime">
<!-- :placeholder="$t('PleaseEnter')+$t('ImplementationDate')"-->
@@ -171,7 +179,7 @@
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text"
:title="$t('vehicleInProductionDate')">{{$t('vehicleInProductionDate')}}</span>
:title="$t('implemenDate')">{{$t('implemenDate')}}</span>
</div>
<a-form-model-item class="itemModel" prop="productionCarImplementTime">
<!-- $t('PleaseEnter')+$t('vehicleInProductionDate')-->
@@ -331,36 +339,36 @@
],
productionCarImplementTime: [
{
max: 100,
message: this.$t('vehicleInProductionDate') + this.$t('cannotExceed') + 100 + this.$t('Characters'),
max: 500,
message: this.$t('implemenDate') + this.$t('cannotExceed') + 500 + this.$t('Characters'),
trigger: 'blur'
}
],
newCarImplementTime: [
{
max: 100,
message: this.$t('ImplementationDate') + this.$t('cannotExceed') + 100 + this.$t('Characters'),
max: 500,
message: this.$t('releaseDate') + this.$t('cannotExceed') + 500 + this.$t('Characters'),
trigger: 'blur'
}
],
issueTime: [
{
max: 100,
message: this.$t('releaseDate') + this.$t('cannotExceed') + 100 + this.$t('Characters'),
max: 500,
message: this.$t('releaseDate') + this.$t('cannotExceed') + 500 + this.$t('Characters'),
trigger: 'blur'
}
],
implementCar: [
{
max: 100,
message: this.$t('implementationModel') + this.$t('cannotExceed') + 100 + this.$t('Characters'),
max: 500,
message: this.$t('implementationModel') + this.$t('cannotExceed') + 500 + this.$t('Characters'),
trigger: 'blur'
}
],
link: [
{
max: 100,
message: this.$t('link') + this.$t('cannotExceed') + 100 + this.$t('Characters'),
max: 5000,
message: this.$t('link') + this.$t('cannotExceed') + 5000 + this.$t('Characters'),
trigger: 'blur'
}
],
@@ -9,10 +9,14 @@
:title="$t('title')">{{$t('title')}}</span>
</div>
<a-form-model-item class="itemModel" prop="titleCn">
<a-input class="box-input"
:disabled="disabled"
v-model.trim="formInline.titleCn"
:placeholder="$t('PleaseEnter')+$t('title')"/>
<a-textarea
:disabled="disabled"
:placeholder="$t('PleaseEnter')+$t('title')"
v-model.trim="formInline.titleCn" :rows="3"/>
<!-- <a-input class="box-input"-->
<!-- :disabled="disabled"-->
<!-- v-model.trim="formInline.titleCn"-->
<!-- :placeholder="$t('PleaseEnter')+$t('title')"/>-->
</a-form-model-item>
</div>
</a-col>
@@ -24,10 +28,14 @@
:title="$t('englishTitle')">{{$t('englishTitle')}}</span>
</div>
<a-form-model-item class="itemModel" prop="titleEn">
<a-input class="box-input"
:disabled="disabled"
v-model.trim="formInline.titleEn"
:placeholder="$t('PleaseEnter')+$t('englishTitle')"/>
<a-textarea
:disabled="disabled"
:placeholder="$t('PleaseEnter')+$t('englishTitle')"
v-model.trim="formInline.titleEn" :rows="3"/>
<!-- <a-input class="box-input"-->
<!-- :disabled="disabled"-->
<!-- v-model.trim="formInline.titleEn"-->
<!-- :placeholder="$t('PleaseEnter')+$t('englishTitle')"/>-->
</a-form-model-item>
</div>
</a-col>
@@ -194,43 +202,43 @@
],
relatedAreasEn: [
{
max: 100,
message: this.$t('relatedFieldsEn') + this.$t('cannotExceed') + 100 + this.$t('Characters'),
max: 500,
message: this.$t('relatedFieldsEn') + this.$t('cannotExceed') + 500 + this.$t('Characters'),
trigger: 'blur'
}
],
relatedAreasCn: [
{
max: 100,
message: this.$t('relatedFields') + this.$t('cannotExceed') + 100 + this.$t('Characters'),
max: 500,
message: this.$t('relatedFields') + this.$t('cannotExceed') + 500 + this.$t('Characters'),
trigger: 'blur'
}
],
sourceCn: [
{
max: 100,
message: this.$t('source') + this.$t('cannotExceed') + 100 + this.$t('Characters'),
max: 500,
message: this.$t('source') + this.$t('cannotExceed') + 500 + this.$t('Characters'),
trigger: 'blur'
}
],
sourceEn: [
{
max: 100,
message: this.$t('sourceEn') + this.$t('cannotExceed') + 100 + this.$t('Characters'),
max: 500,
message: this.$t('sourceEn') + this.$t('cannotExceed') + 500 + this.$t('Characters'),
trigger: 'blur'
}
],
time: [
{
max: 100,
message: this.$t('date') + this.$t('cannotExceed') + 100 + this.$t('Characters'),
max: 500,
message: this.$t('date') + this.$t('cannotExceed') + 500 + this.$t('Characters'),
trigger: 'blur'
}
],
link: [
{
max: 100,
message: this.$t('link') + this.$t('cannotExceed') + 100 + this.$t('Characters'),
max: 5000,
message: this.$t('link') + this.$t('cannotExceed') + 5000 + this.$t('Characters'),
trigger: 'blur'
}
],
@@ -20,7 +20,7 @@
</div>
<a-form-model-item class="itemModel"
:prop="'dataList.'+index+'.standardNumber'"
:rules="[{max: 100,message: $t('standardNo') + $t('cannotExceed') + 100 + $t('Characters'),trigger: 'blur'
:rules="[{max: 500,message: $t('standardNo') + $t('cannotExceed') + 500 + $t('Characters'),trigger: 'blur'
}]">
<a-input class="box-input"
:disabled="disabled"
@@ -37,7 +37,7 @@
</div>
<a-form-model-item class="itemModel"
:prop="'dataList.'+index+'.standardNameCn'"
:rules="[{max: 100,message: $t('standardNameCn') + $t('cannotExceed') + 100 + $t('Characters'),trigger: 'blur'
:rules="[{max: 500,message: $t('standardNameCn') + $t('cannotExceed') + 500 + $t('Characters'),trigger: 'blur'
}]">
<a-input class="box-input"
:disabled="disabled"
@@ -55,7 +55,7 @@
</div>
<a-form-model-item class="itemModel"
:prop="'dataList.'+index+'.standardNameEn'"
:rules="[{max: 100,message: $t('standardNameEn') + $t('cannotExceed') + 100 + $t('Characters'),trigger: 'blur'
:rules="[{max: 500,message: $t('standardNameEn') + $t('cannotExceed') + 500 + $t('Characters'),trigger: 'blur'
}]">
<a-input class="box-input"
:disabled="disabled"
@@ -20,7 +20,7 @@
</div>
<a-form-model-item class="itemModel"
:prop="'dataList.'+index+'.planNumberCn'"
:rules="[{max: 100,message: $t('planNoChinese') + $t('cannotExceed') + 100 + $t('Characters'),trigger: 'blur'
:rules="[{max: 500,message: $t('planNoChinese') + $t('cannotExceed') + 500 + $t('Characters'),trigger: 'blur'
}]">
<a-input class="box-input"
:disabled="disabled"
@@ -37,7 +37,7 @@
</div>
<a-form-model-item class="itemModel"
:prop="'dataList.'+index+'.standardNameCn'"
:rules="[{max: 100,message: $t('standardNameCn') + $t('cannotExceed') + 100 + $t('Characters'),trigger: 'blur'
:rules="[{max: 500,message: $t('standardNameCn') + $t('cannotExceed') + 500 + $t('Characters'),trigger: 'blur'
}]">
<a-input class="box-input"
:disabled="disabled"
@@ -55,7 +55,7 @@
</div>
<a-form-model-item class="itemModel"
:prop="'dataList.'+index+'.standardNameEn'"
:rules="[{max: 100,message: $t('standardNameEn') + $t('cannotExceed') + 100 + $t('Characters'),trigger: 'blur'
:rules="[{max: 500,message: $t('standardNameEn') + $t('cannotExceed') + 500 + $t('Characters'),trigger: 'blur'
}]">
<a-input class="box-input"
:disabled="disabled"
@@ -10,11 +10,17 @@
<div class="myList-box-content" v-if="dataSource.length > 0">
<div class="myList-box-content-box" v-for="(item,index) in dataSource" :key="index" @click="prcClick(item)">
<div class="top">
<span class="top-text" :title="item.prcName">{{item.prcName}}</span>
<!-- <span class="top-admin" :title="prcTypeName[item.prcType]">{{prcTypeName[item.prcType]}}</span>-->
<span class="top-text" v-if="item.flowType == 10"
:title="item.flowTypeShow+'-'+item.projectName">
{{item.flowTypeShow+'-'+item.projectName}}
</span>
<span class="top-text" :title="item.flowTypeShow+'-'+item.serialNumber">
{{item.flowTypeShow+'-'+item.serialNumber}}
</span>
<!-- <span class="top-admin" :title="prcTypeName[item.prcType]">{{prcTypeName[item.prcType]}}</span>-->
</div>
<div class="button">
{{item.creatTime}}
{{item.endTime}}
</div>
<div class="with">
{{$t('Pending')}}
@@ -43,9 +49,13 @@
dataSource: [],
loading: false,
prcTypeName: {
1: this.$t('taskConfirmationProcess'),
5:this.$t('collectionOfRegulatoryOpinionsProcess'),
6:this.$t('regulatoryTechnologyAssessmentProcess')
1: this.$t('listTaskConfirmation'),
2: this.$t('designComplianceReview'),
3: this.$t('preHomeConfirmation'),
4: this.$t('verificationComplianceReview'),
10: this.$t('confirmationOfRegulationsList'),
5: this.$t('collectionOfRegulatoryOpinionsProcess'),
6: this.$t('regulatoryTechnologyAssessmentProcess')
}
}
},
@@ -74,11 +84,11 @@
queryProcess() {
this.loading = true
let parmes = {}
parmes.current = this.pageNo
parmes.size = this.pageSize
parmes.userId = this.userInfo().userId
postAction('task/todoTaskList', parmes).then((res) => {
this.dataSource = res.list || []
parmes.pageNo = this.pageNo
parmes.pageSize = this.pageSize
// parmes.userId = this.userInfo().userId
getAction('/todoCenter/projectProcess/todoTaskList', parmes).then((res) => {
this.dataSource = res.result.records || []
this.loading = false
})
},
@@ -88,29 +98,138 @@
})
},
prcClick(row) {
// let index = row.taskIds.lastIndexOf(',')
// row.taskIds = row.taskIds.slice(0, index)
let query = {}
row.router = this.$route.path
if (row.prcType == '1') {
if (row.flowType == '1') {
query = {
taskDefinitionKey: row.taskDefinitionKey,
taskIds: row.taskId,
prcType: row.flowType,
prcNum: row.prcNum,
isTrue: true
}
let newUrl = this.$router.resolve({
path: '/handshakeProcess',
query: row
query: query
})
window.open(newUrl.href, '_blank')
} else if (row.prcType == '5') {
} else if (row.flowType == '10') {
let newUrl = this.$router.resolve({
path: '/regulatoryProcessReview',
query: row
path: '/ProjectDetails',
query: {
id: row.projectLibraryId,
projectName: row.projectName,
projectNameId: row.projectNameId,
targetMarket: row.targetMarket,
studioEngineer: row.studioEngineer,
type: '102'
}
})
window.open(newUrl.href, '_blank')
} else if (row.prcType == '6') {
} else if (row.flowType == '2') {
row.taskId = row.taskId + ''
if (row.taskId.length > 30) {
row.taskId = ''
}
query = {
router: row.router,
taskIds: row.taskId,
actiProcInstId: row.actiProcInstId,
projectTaskInventoryId: row.projectLawsInventoryId,
projectLibraryId: row.projectLibraryId,
id: row.projectLibraryId,
studioEngineer: row.studioEngineer,
serialNumber: row.serialNumber,
TaskKey: row.taskDefinitionKey,
isDisplay: true,
flowType: 2,
Sponsor: 'designInitiatorName',
personLiable: 'designDutyName',
typeOfDeliverables: 'designDeliverableTypeName',
deliverableTemplate: 'designDeliverableTemplate',
DueDate: 'designDueDate',
remarks: 'designRemark',
projectName: row.projectName,
targetMarket: row.targetMarket,
projectNameId: row.projectNameId,
primaryKeyId: row.primaryKeyId,
PersonChargeFeedback: row.personChargeFeedback
}
let newUrl = this.$router.resolve({
path: '/evaluationProcess',
query: row
path: '/taskListProcess',
query: query
})
window.open(newUrl.href, '_blank')
} else if (row.flowType == '3') {
row.taskId = row.taskId + ''
if (row.taskId.length > 30) {
row.taskId = ''
}
query = {
router: row.router,
taskIds: row.taskId,
actiProcInstId: row.actiProcInstId,
projectTaskInventoryId: row.projectLawsInventoryId,
studioEngineer: row.studioEngineer,
projectLibraryId: row.projectLibraryId,
serialNumber: row.serialNumber,
TaskKey: row.taskDefinitionKey,
flowType: 3,
isDisplay: true,
id: row.projectLibraryId,
Sponsor: 'prehomoInitiatorName',
personLiable: 'prehomoDutyName',
typeOfDeliverables: 'prehomoDeliverableTypeName',
deliverableTemplate: 'prehomoDeliverableTemplate',
DueDate: 'prehomoDueDate',
remarks: 'prehomoRemark',
projectName: row.projectName,
targetMarket: row.targetMarket,
projectNameId: row.projectNameId,
primaryKeyId: row.primaryKeyId,
PersonChargeFeedback: row.personChargeFeedback
}
let newUrl = this.$router.resolve({
path: '/taskListProcess',
query: query
})
window.open(newUrl.href, '_blank')
} else if (row.flowType == '4') {
row.taskId = row.taskId + ''
if (row.taskId.length > 30) {
row.taskId = ''
}
query = {
router: row.router,
taskIds: row.taskId,
actiProcInstId: row.actiProcInstId,
id: row.projectLibraryId,
projectLibraryId: row.projectLibraryId,
studioEngineer: row.studioEngineer,
serialNumber: row.serialNumber,
projectTaskInventoryId: row.projectLawsInventoryId,
TaskKey: row.taskDefinitionKey,
flowType: 4,
isDisplay: true,
Sponsor: 'verifyInitiatorName',
personLiable: 'verifyDutyName',
typeOfDeliverables: 'verifyDeliverableTypeName',
deliverableTemplate: 'verifyDeliverableTemplate',
DueDate: 'verifyDueDate',
remarks: 'verifyRemark',
projectName: row.projectName,
targetMarket: row.targetMarket,
projectNameId: row.projectNameId,
primaryKeyId: row.primaryKeyId,
PersonChargeFeedback: row.personChargeFeedback
}
let newUrl = this.$router.resolve({
path: '/taskListProcess',
query: query
})
window.open(newUrl.href, '_blank')
}
}
},
}
}
</script>
@@ -167,6 +286,7 @@
text-overflow: ellipsis;
white-space: nowrap;
}
/*.top-admin {*/
/* font-size: 16px;*/
/* font-family: Blue Sky Noto;*/
@@ -11,8 +11,8 @@
<div class="myNews-box-content-box" v-for="(item,index) in dataSource" :key="index" @click="magClick(item)">
<img src="../../../assets/wdxx.png" alt="">
<div class="content-box">
<div class="top" :title="item.titile">
{{item.titile}}
<div class="top" :title="item.msgContent">
{{item.msgContent}}
</div>
<div class="botton">
{{item.sendTime}}
@@ -69,9 +69,12 @@
magClick(row) {
getAction(this.url.readAllMsg, { ids: row.id }).then((res) => {
})
localStorage.setItem('msgContent', row.msgContent)
this.$router.push({
path: '/system/MessageDetails',
query: row
path: '/isps/userAnnouncement',
query: {
Date: Date.now()
}
})
},
moreClick() {
@@ -266,7 +266,7 @@
form: {},
rules: {
name: [
{ required: true, message: this.$t('PleaseEnter') + this.$t('clauseNo'), trigger: 'blur' },
// { required: true, message: this.$t('PleaseEnter') + this.$t('clauseNo'), trigger: 'blur' },
{ min: 1, max: 200, message: this.$t('cantExeed') + '200' + this.$t('characters'), trigger: 'blur' }
],
itemName: [
@@ -60,7 +60,9 @@
<span style="cursor: pointer"
@click="fileClick(resultData.fileNameRight,resultData.fileIdRight)">{{resultData.fileNameRight}}</span>
</div>
<div class="detail-content-header-content-rightOne" :title="$t('comparisonDifferenceComment')">
<div class="detail-content-header-content-rightOne"
:class="{'detail-content-header-content-rightOne-active':isDisplay}"
:title="$t('comparisonDifferenceComment')">
{{$t('comparisonDifferenceComment')}}
</div>
<div class="detail-content-header-content-right" v-if="!isDisplay">
@@ -567,6 +569,10 @@
white-space: nowrap;
}
.detail-content-header-content-rightOne-active {
border-right: none;
}
.detail-content-header-content-right {
width: 128px;
display: inline-block;
@@ -751,7 +757,7 @@
}
.detail-content-header-content-left-active {
width: 50% !important;
width: calc(50% - 130px) !important;
}
.detail-content-bottom-left-text {
@@ -761,7 +767,8 @@
.detail-content-bottom-right-text {
width: calc(50% - 256px);
}
.operator-text-text-text{
color: #00B3BE!important;
.operator-text-text-text {
color: #00B3BE !important;
}
</style>
@@ -16,7 +16,7 @@
data() {
return {
name: '',
actUrl: 'http://10.0.1.13:17210/bat-wkflow/modeler.html?modelId='//本地
actUrl: 'http://localhost:17210/bat-wkflow/modeler.html?modelId='//本地
// actUrl: 'http://10.255.35.25:8082/modeler.html?modelId=' //正式
// actUrl: 'http://10.255.128.148:8888/modeler.html?modelId=' //测试
}
@@ -15,7 +15,15 @@
<span class="title-text-text" :title="$t('complianceResults')">{{$t('complianceResults')}}</span>
</div>
<div class="title-text-right" v-if="disabled">
{{formInline.complianceResult == 'Compliance'?$t('accord'):$t('nonConformity')}}
<span v-if="formInline.complianceResult == 'Compliance'">
{{$t('accord')}}
</span>
<span v-else-if="formInline.complianceResult == 'Non-Compliance'">
{{$t('nonConformity')}}
</span>
<span v-else>
--
</span>
</div>
<a-form-model-item class="itemModel" v-if="!disabled" :prop="!disabled?'complianceResult':''">
<a-radio-group style="margin-top: 2px" class="box-input"
@@ -51,7 +59,7 @@
<span class="title-text-text" :title="$t('relevantSections')">{{$t('relevantSections')}}</span>
</div>
<div class="title-text-right" :title="item.relatedSection" v-if="disabled">
{{item.relatedSection}}
{{item.relatedSection ?item.relatedSection : '--'}}
</div>
<a-form-model-item class="itemModel" v-if="!disabled"
:prop="'dataList.'+index+'.relatedSection'"
@@ -73,7 +81,7 @@
:title="$t('problemDescription')">{{$t('problemDescription')}}</span>
</div>
<div class="title-text-right" :title="item.issueOrSuggest" v-if="disabled">
{{item.issueOrSuggest}}
{{item.issueOrSuggest ? item.issueOrSuggest :'--'}}
</div>
<a-form-model-item class="itemModel" :prop="'dataList.'+index+'.issueOrSuggest'" v-if="!disabled"
:rules="[{ required: true, message: $t('problemDescription') + $t('cannotEmpty'), trigger: 'blur'},
@@ -121,7 +129,7 @@
<span class="title-text-text" :title="$t('relevantSections')">{{$t('relevantSections')}}</span>
</div>
<div class="title-text-right" :class="{'title-text-right-text':disabled}" :title="item.relatedSection">
{{item.relatedSection}}
{{item.relatedSection?item.relatedSection : '--'}}
</div>
</div>
</a-col>
@@ -132,7 +140,7 @@
:title="$t('problemDescription')">{{$t('problemDescription')}}</span>
</div>
<div class="title-text-right" :class="{'title-text-right-text':disabled}" :title="item.issueOrSuggest">
{{item.issueOrSuggest}}
{{item.issueOrSuggest ? item.issueOrSuggest:'--'}}
</div>
</div>
</a-col>
@@ -156,12 +164,13 @@
</a-col>
</a-row>
</div>
<div class="box-text" style="margin-top: 10px" v-if="disabled">
<div class="box-text" style="margin-top: 10px"
v-if="disabled && $route.query.taskDefinitionKey == 'fqrsc' && !isTrue">
<div class="header-text">
{{$t('sponsorReview')}}
</div>
</div>
<a-row :gutter="24" v-if="disabled">
<a-row :gutter="24" v-if="disabled && $route.query.taskDefinitionKey == 'fqrsc' && !isTrue">
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
@@ -175,6 +184,18 @@
</div>
</a-col>
</a-row>
<!-- <a-row :gutter="24" v-if="disabled && $route.query.taskDefinitionKey == 'fqrsc' && isTrue">-->
<!-- <a-col :span="24">-->
<!-- <div class="box-title-text">-->
<!-- <div class="title-text">-->
<!-- <span class="title-text-text" :title="$t('reviewComments')">{{$t('reviewComments')}}</span>-->
<!-- </div>-->
<!-- <div class="title-text-right" :class="{'title-text-right-text':disabled}" :title="formInline.approvalOpinion">-->
<!-- {{formInline.approvalOpinion}}-->
<!-- </div>-->
<!-- </div>-->
<!-- </a-col>-->
<!-- </a-row>-->
</a-form-model>
</div>
<uploadFile ref="uploadFile" :disabled="disabled" @uploadSuccess="uploadSuccess"></uploadFile>
@@ -259,7 +280,8 @@
},
disabled: false,
uploadIndex: '',
dataList: []
dataList: [],
isTrue: false
}
},
mounted() {
@@ -283,8 +305,14 @@
})
if (this.$route.query.taskDefinitionKey == 'pgrqr') {
this.disabled = false
if (this.$route.query.isDisabled) {
this.disabled = JSON.parse(this.$route.query.isDisabled)
}
} else {
this.disabled = true
if (this.$route.query.isDisabled) {
this.isTrue = JSON.parse(this.$route.query.isDisabled)
}
}
},
methods: {
@@ -443,4 +471,5 @@
white-space: normal;
word-break: break-all;
}
</style>
@@ -74,7 +74,9 @@
<span v-else>--</span>
</span>
<span slot="Results" slot-scope="text,result">
{{text == 'Compliance' ? $t('accord'):$t('nonConformity')}}
<span v-if="text == 'Compliance'">{{$t('accord')}}</span>
<span v-else-if="text == 'Non-Compliance'">{{$t('nonConformity')}}</span>
<span v-else>--</span>
</span>
<span slot="sponsorFeedback" slot-scope="text,result">
<a-textarea :placeholder="$t('pleaseEnter')+$t('sponsorFeedback')"
@@ -282,6 +284,81 @@
ellipsis: true,
scopedSlots: { customRender: 'sponsorFeedback' }
}
],
columnsOne: [
{
title: this.$t('clauseNo'),
dataIndex: 'itemNum',
align: 'center',
width: 180,
ellipsis: true
},
{
title: this.$t('clauseName'),
dataIndex: 'itemName',
align: 'center',
width: 180,
ellipsis: true
},
{
title: this.$t('clauseContent'),
dataIndex: 'itemContent',
align: 'center',
width: 280,
scopedSlots: { customRender: 'clauseContent' }
},
{
title: this.$t('evaluationMethod'),
dataIndex: 'evaluationMethodsName',
align: 'center',
width: 180,
ellipsis: true
},
{
title: this.$t('complianceResults'),
dataIndex: 'complianceResult',
align: 'center',
width: 180,
ellipsis: true,
scopedSlots: { customRender: 'Results' }
},
{
title: this.$t('nameTechnicalDocument'),
dataIndex: 'technicalFileName',
align: 'center',
width: 280,
ellipsis: true
},
{
title: this.$t('chapter'),
dataIndex: 'section',
align: 'center',
width: 180,
ellipsis: true
},
{
title: this.$t('opinion'),
dataIndex: 'opinion',
align: 'center',
width: 180,
ellipsis: true
},
{
title: this.$t('enclosure'),
dataIndex: 'accessoryFile',
align: 'center',
width: 180,
ellipsis: true,
scopedSlots: { customRender: 'accessoryFile' }
},
{
title: this.$t('sponsorFeedback'),
dataIndex: 'sponsorFeedback',
align: 'center',
width: 180,
ellipsis: true,
scopedSlots: { customRender: 'sponsorFeedbackIndex' }
}
]
}
},
@@ -296,7 +373,11 @@
antTableHeader[0].style = 'margin-bottom: -8px;padding-bottom: 0px;min-width: 8px;overflow: hidden'
})
}
if (this.$route.query.taskDefinitionKey != 'pgrqr') {
let disabled = false
if (this.$route.query.isDisabled) {
disabled = JSON.parse(this.$route.query.isDisabled)
}
if (this.$route.query.taskDefinitionKey != 'pgrqr' && !disabled) {
this.dataSource.forEach(res => {
res.sponsorFeedback = ''
})
@@ -306,10 +387,18 @@
},
computed: {
columns() {
if (this.$route.query.taskDefinitionKey == 'pgrqr') {
return this.columnsTwo
let disabled = false
if (this.$route.query.isDisabled) {
disabled = JSON.parse(this.$route.query.isDisabled)
}
if (disabled) {
return this.columnsOne
} else {
return this.columnsThree
if (this.$route.query.taskDefinitionKey == 'pgrqr') {
return this.columnsTwo
} else {
return this.columnsThree
}
}
}
},
@@ -345,14 +434,14 @@
this.$message.warning(this.$t('PleaseCompleteList'))
return
}
Object.keys(this.dataSource[i]).forEach(res=>{
Object.keys(this.dataSource[i]).forEach(res => {
if (this.dataSource[i][res] && typeof this.dataSource[i][res] == 'string') {
this.dataSource[i][res] = this.dataSource[i][res].replace(/\"/g, '“')
this.dataSource[i][res] = this.dataSource[i][res].replace(/\'/g, '')
}
})
}
if (this.$route.query.taskDefinitionKey == 'pgrqr'){
if (this.$route.query.taskDefinitionKey == 'pgrqr') {
let feedbackTime = moment(new Date()).format('YYYY-MM-DD HH:mm:ss')
for (let i = 0; i < this.dataSource.length; i++) {
this.dataSource[i].feedbackTime = feedbackTime
@@ -361,7 +450,7 @@
callBack && callBack(this.dataSource)
},
preservationData(callBack) {
if (this.$route.query.taskDefinitionKey == 'pgrqr'){
if (this.$route.query.taskDefinitionKey == 'pgrqr') {
let feedbackTime = moment(new Date()).format('YYYY-MM-DD HH:mm:ss')
for (let i = 0; i < this.dataSource.length; i++) {
this.dataSource[i].feedbackTime = feedbackTime
@@ -12,18 +12,18 @@
{{$t('feedbackPoint')+(index+1)}}
<a-icon class="icon-size"
@click="addData"
v-if="(formInline.dataList.length-1) == index"
v-if="(formInline.dataList.length-1) == index && !disabled"
type="plus-circle"/>
<a-icon class="icon-size"
@click="deleteData"
v-if="formInline.dataList.length > 1 && (formInline.dataList.length - 1) == index"
v-if="formInline.dataList.length > 1 && (formInline.dataList.length - 1) == index && !disabled"
type="minus-circle"/>
</div>
<a-row :gutter="24">
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="Required">*</span>
<span class="Required" v-if="!disabled">*</span>
<span class="title-text-text" :title="$t('relevantSections')">{{$t('relevantSections')}}</span>
</div>
<a-form-model-item class="itemModel"
@@ -33,6 +33,7 @@
}]">
<a-textarea :placeholder="$t('PleaseEnter')+$t('relevantSections')"
:disabled="disabled"
:title="item.relatedSection"
v-model="item.relatedSection" :rows="4"/>
<!-- <a-input class="box-input"-->
<!-- :disabled="disabled"-->
@@ -53,6 +54,7 @@
}]">
<a-textarea :placeholder="$t('PleaseEnter')+$t('clauseContent')"
:disabled="disabled"
:title="item.clauseContent"
v-model="item.clauseContent" :rows="4"/>
</a-form-model-item>
</div>
@@ -62,7 +64,7 @@
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="Required">*</span>
<span class="Required" v-if="!disabled">*</span>
<span class="title-text-text"
:title="$t('questionsSuggestions')">{{$t('questionsSuggestions')}}</span>
</div>
@@ -72,6 +74,7 @@
}]">
<a-textarea :placeholder="$t('PleaseEnter')+$t('questionsSuggestions')"
:disabled="disabled"
:title="item.issueOrSuggest"
v-model="item.issueOrSuggest" :rows="4"/>
</a-form-model-item>
</div>
@@ -79,7 +82,7 @@
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="Required">*</span>
<span class="Required" v-if="!disabled">*</span>
<span class="title-text-text" :title="$t('reason')">{{$t('reason')}}</span>
</div>
<a-form-model-item class="itemModel"
@@ -89,6 +92,7 @@
{max: 300,message: $t('reason') + $t('cannotExceed') + 300 + $t('Characters'),trigger: 'blur'
}]">
<a-textarea :placeholder="$t('PleaseEnter')+$t('reason')"
:title="item.reason"
:disabled="disabled"
v-model="item.reason" :rows="4"/>
</a-form-model-item>
@@ -112,6 +116,7 @@
</div>
</a-col>
</a-row>
</div>
</a-form-model>
</div>
@@ -166,7 +171,9 @@
}
this.formInline = { ...this.formInline }
})
if (this.$route.query.isDisabled) {
this.disabled = JSON.parse(this.$route.query.isDisabled)
}
},
methods: {
clickButtonToUpload(item, index) {
@@ -301,4 +308,7 @@
margin-left: 8px;
cursor: pointer;
}
::v-deep .ant-input-disabled{
color: #000F16;
}
</style>
@@ -72,7 +72,7 @@
</a-col>
</a-row>
<a-row :gutter="24" v-if="$route.query.TaskKey == 'dreDispose'">
<a-col :span="12">
<a-col :span="12" v-if="$route.query.isDisplay">
<div class="box-title-text">
<div class="title-text-fq">
<span class="Required" v-if="$route.query.isDisplay">*</span>
@@ -88,16 +88,29 @@
</a-form-model-item>
</div>
</a-col>
<a-col :span="24" v-else>
<div class="box-title-text">
<div class="title-text-fq">
<span class="title-text-text"
:title="$t('feedbackFromTheEngineer')">{{$t('feedbackFromTheEngineer')}}</span>
</div>
<a-form-model-item class="itemModel">
<span class="text-header">
{{formInline.engineerFeedbackContent}}
</span>
</a-form-model-item>
</div>
</a-col>
</a-row>
<a-row :gutter="24" v-if="$route.query.TaskKey == 'dreDispose'">
<a-col :span="12">
<div class="box-title-text">
<div class="title-text-fq">
<!-- <span class="Required" v-if="this.$route.query.isDisplay">*</span>-->
<!-- <span class="Required" v-if="this.$route.query.isDisplay">*</span>-->
<span class="title-text-text"
:title="$t('Deliverables')">{{$t('Deliverables')}}</span>
</div>
<!-- :prop="!this.$route.query.isDisplay?'':'fileId'"-->
<!-- :prop="!this.$route.query.isDisplay?'':'fileId'"-->
<a-form-model-item class="itemModel">
<a-button type="primary" class="button-text"
@click="clickButtonToUpload('fileId')">
@@ -80,7 +80,7 @@
methods: {
getList() {
let query = {
actiProcInstId: this.$route.query.actiProcInstId
actiProcInstId: this.$route.query.actiProcInstId || this.$route.query.prcId
}
this.loading = true
getAction('/wkflow/processHistoryEO/list', query).then((res) => {
@@ -26,7 +26,7 @@
:title="$t('evaluatorFeedback')"
/>
<footerProcess
v-if="isDisplay"
v-if="isDisplay && !disabled"
:isPreservation="isPreservation"
:isSubmit="true"
:isSendBack="isSendBack"
@@ -78,6 +78,7 @@
isPreservation: false,
isSendBack: false,
isTrue: false,
disabled:false,
standardContentList: [],
standardContent: [
{
@@ -155,6 +156,9 @@
this.isSendBack = true
}
this.queryTaskDetailByTask()
if (this.$route.query.isDisabled) {
this.disabled = JSON.parse(this.$route.query.isDisabled)
}
},
methods: {
...mapGetters(['userInfo']),
@@ -28,7 +28,7 @@
"/>
<examineInformation
:isFlag="isFlag"
v-if="isDisplay"
v-if="isDisplay && isTrue"
isApprovalOpinion
:title="titleName"
:isSendBack="isSendBackOne"
@@ -37,6 +37,7 @@
<!-- @terminationProcess="terminationProcess"-->
<footerProcess
is-submit
v-if="isTrue"
:isSendBack="isSendBack"
@submit="submit"
@sendBack="sendBack"
@@ -116,7 +117,8 @@
queryProject: {},
loading: false,
titleName: '',
textLoading: this.$t('dataLoading')
textLoading: this.$t('dataLoading'),
isTrue: false
}
},
created() {
@@ -130,6 +132,9 @@
} else {
this.titleName = this.$t('taskConfirmationResponsiblePerson')
}
if (this.$route.query.isTrue) {
this.isTrue = JSON.parse(this.$route.query.isTrue)
}
this.queryTaskDetailByTask(function() {
_this.queryProjectLawsInventoryInfo()
})
@@ -181,10 +186,10 @@
this.loading = true
getAction(this.url.queryTaskDetailByTaskIds, { taskIds: this.$route.query.taskIds }).then((res) => {
if (res instanceof String) {
this.queryBy = JSON.parse(res)
this.queryBy = JSON.parse(res) || {}
callback()
} else {
this.queryBy = res
this.queryBy = res || {}
callback()
}
})
@@ -15,6 +15,7 @@
</div>
<regulatoryCirculationHistory :isTrue="isTrue"
v-if="$route.query.prcType == '5' || $route.query.prcType == '6'"/>
<taskCirculationHistory v-else-if="$route.query.prcType == '2' || $route.query.prcType == '3' || $route.query.prcType == '4'"/>
<circulationHistory v-else/>
</div>
</template>
@@ -22,6 +23,7 @@
<script>
import circulationHistory from '../../components/circulationHistory'
import regulatoryCirculationHistory from '../../components/regulatoryCirculationHistory'
import taskCirculationHistory from '../../components/taskCirculationHistory'
import axios from 'axios'
import Vue from 'vue'
import { ACCESS_TOKEN } from '@/store/mutation-types'
@@ -30,7 +32,8 @@
name: 'processDetails',
components: {
circulationHistory,
regulatoryCirculationHistory
regulatoryCirculationHistory,
taskCirculationHistory
},
data() {
return {
@@ -19,7 +19,7 @@
:title="$t('feedbackInformation')"
/>
<footerProcess
v-if="isDisplay"
v-if="isDisplay && !disabled"
isPreservation
:isSubmit="true"
@preservation="preservation"
@@ -61,6 +61,7 @@
},
loading: false,
isDisplay: true,
disabled: false,
feedbackDataList: [],
queryProject: {},
standardContentList: [
@@ -101,6 +102,9 @@
},
mounted() {
this.isDisplay = false
if (this.$route.query.isDisabled) {
this.disabled = JSON.parse(this.$route.query.isDisabled)
}
this.queryTaskDetailByTask(() => {
this.lawsOpinionAssessmentResult()
})
@@ -120,10 +124,16 @@
})
},
lawsOpinionAssessmentResult() {
let createBy = ''
if (this.$route.query.taskDefinitionKey == 'gcsfq' && this.disabled){
createBy = ''
}else{
createBy = this.userInfo().username
}
getAction(this.url.list, {
lawsOpinionGatherId: this.queryProject.id,
actiProcInstId: this.$route.query.prcId,
createBy: this.userInfo().username
createBy: createBy
}).then((res) => {
if (res.success) {
this.feedbackDataList = res.result || []
@@ -324,14 +324,19 @@
putAction(this.url.dreSubmit, query).then((res) => {
if (res.success) {
this.$message.success(this.$t('OperationSuccessful'))
this.$router.push({
path: '/ProjectDetails',
query: {
type: '103',
...this.$route.query
}
})
if (this.$route.query.router) {
this.$router.push({
path: '/projectRegulationTasks'
})
} else {
this.$router.push({
path: '/ProjectDetails',
query: {
type: '103',
...this.$route.query
}
})
}
// setTimeout(() => {
// this.loading = false
// window.close()
@@ -375,13 +380,19 @@
if (res.success) {
setTimeout(() => {
this.loading = false
this.$router.push({
path: '/ProjectDetails',
query: {
type: '103',
...this.$route.query
}
})
if (this.$route.query.router) {
this.$router.push({
path: '/projectRegulationTasks'
})
} else {
this.$router.push({
path: '/ProjectDetails',
query: {
type: '103',
...this.$route.query
}
})
}
}, 1000)
}
})
@@ -390,10 +401,10 @@
this.loading = true
getAction(this.url.queryTaskDetailByTaskIds, { taskIds: this.$route.query.taskIds }).then((res) => {
if (res instanceof String) {
this.queryBy = JSON.parse(res)
this.queryBy = JSON.parse(res) || {}
callback()
} else {
this.queryBy = res
this.queryBy = res || {}
callback()
}
})
@@ -684,6 +684,10 @@
// }
},
mounted() {
console.log(this.$route.query)
if(this.$route.query.type == '1'){
this.handleOkRoleSwitching()
}
this.GetgetLoginUserType()
console.log(this.currentPersonRole)
setTimeout(() => {
@@ -718,36 +722,62 @@
})
},
handleOkRoleSwitching() {
this.$refs.ruleFormRoleSwitching.validate(valid => {
if (valid) {
let query = {
userType: this.formInlineRoleSwitching.roleSwitchingCode,
paramsManifestId: this.$route.query.id,
projectId: this.$route.query.projectId,
userId: this.userInfo().id
}
this.confirmLoadingRoleSwitching = true
postAction('/params/userTypeLog/edit', query).then((res) => {
if (res.success) {
this.currentPersonRole = this.formInlineRoleSwitching.roleSwitchingCode
this.$message.success(this.$t('OperationSuccessful'))
this.$refs.CollectionTabel.getHeader(this.currentPersonRole)
this.visibleRoleSwitching = false
this.confirmLoadingRoleSwitching = false
localStorage.setItem('currentPersonRole', JSON.stringify(this.formInlineRoleSwitching.roleSwitchingCode))
this.RoleType.forEach((item,index) => {
if(item.value == this.currentPersonRole){
this.rolename = item.label
}
})
this.selectedRowKeysValue = []
} else {
this.confirmLoadingRoleSwitching = false
this.$message.warning(this.$t('operationFailed'))
}
})
if(this.$route.query.type == '1'){
let query = {
userType:this.$route.query.userType,
paramsManifestId: this.$route.query.id,
projectId: this.$route.query.projectId,
userId: this.userInfo().id
}
})
this.confirmLoadingRoleSwitching = true
postAction('/params/userTypeLog/edit', query).then((res) => {
if (res.success) {
this.currentPersonRole = this.$route.query.userType
this.visibleRoleSwitching = false
this.confirmLoadingRoleSwitching = false
localStorage.setItem('currentPersonRole', JSON.stringify(this.$route.query.userType))
this.RoleType.forEach((item,index) => {
if(item.value == this.currentPersonRole){
this.rolename = item.label
}
})
this.selectedRowKeysValue = []
} else {
this.confirmLoadingRoleSwitching = false
this.$message.warning(this.$t('operationFailed'))
}
})
}else {
this.$refs.ruleFormRoleSwitching.validate(valid => {
if (valid) {
let query = {
userType: this.formInlineRoleSwitching.roleSwitchingCode,
paramsManifestId: this.$route.query.id,
projectId: this.$route.query.projectId,
userId: this.userInfo().id
}
this.confirmLoadingRoleSwitching = true
postAction('/params/userTypeLog/edit', query).then((res) => {
if (res.success) {
this.currentPersonRole = this.formInlineRoleSwitching.roleSwitchingCode
this.$message.success(this.$t('OperationSuccessful'))
this.visibleRoleSwitching = false
this.confirmLoadingRoleSwitching = false
localStorage.setItem('currentPersonRole', JSON.stringify(this.formInlineRoleSwitching.roleSwitchingCode))
this.RoleType.forEach((item,index) => {
if(item.value == this.currentPersonRole){
this.rolename = item.label
}
})
this.selectedRowKeysValue = []
} else {
this.confirmLoadingRoleSwitching = false
this.$message.warning(this.$t('operationFailed'))
}
})
}
})
}
},
roleSwitchingClick() {
this.visibleRoleSwitching = true

Some files were not shown because too many files have changed in this diff Show More