Merge branch 'main' of https://dd3skj.picp.vip/zhaoxinyu/v4
This commit is contained in:
@@ -11,7 +11,7 @@ import javax.validation.constraints.Positive;
|
|||||||
* @Digits注解 验证注解的元素值的整数位数和小数位数上限 ,并且类型为float,double,BigDecimal。
|
* @Digits注解 验证注解的元素值的整数位数和小数位数上限 ,并且类型为float,double,BigDecimal。
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
public class PageForm<T> {
|
public class PageForm {
|
||||||
|
|
||||||
@NotNull(message = "pageNumber不能为空")
|
@NotNull(message = "pageNumber不能为空")
|
||||||
@Min(value = 1, message = "pageNumber最小为1")
|
@Min(value = 1, message = "pageNumber最小为1")
|
||||||
@@ -30,8 +30,19 @@ public class PageForm<T> {
|
|||||||
|
|
||||||
private String searchKeyword;
|
private String searchKeyword;
|
||||||
|
|
||||||
|
/*======================流程参数==============================*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否审核
|
||||||
|
*/
|
||||||
private Boolean audit;
|
private Boolean audit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 业务ID
|
||||||
|
*/
|
||||||
|
private String bizId;
|
||||||
|
|
||||||
|
|
||||||
public PageForm defaultSort(String column, String order) {
|
public PageForm defaultSort(String column, String order) {
|
||||||
this.setPageOrderName(column);
|
this.setPageOrderName(column);
|
||||||
this.setPageOrderBy(order);
|
this.setPageOrderBy(order);
|
||||||
|
|||||||
@@ -884,7 +884,6 @@ public interface BaseService<T> {
|
|||||||
*/
|
*/
|
||||||
Pagination listPageMap(Integer pageNumber, int pageSize, Condition cnd);
|
Pagination listPageMap(Integer pageNumber, int pageSize, Condition cnd);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DataTable Page
|
* DataTable Page
|
||||||
*
|
*
|
||||||
@@ -950,4 +949,12 @@ public interface BaseService<T> {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
NutMap data(int length, int start, int draw, Cnd cnd, String linkName);
|
NutMap data(int length, int start, int draw, Cnd cnd, String linkName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取Map
|
||||||
|
* @param sql
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
NutMap fetchMap(Sql sql);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1436,4 +1436,12 @@ public class BaseServiceImpl<T> extends EntityService<T> implements BaseService<
|
|||||||
re.put("recordsTotal", length);
|
re.put("recordsTotal", length);
|
||||||
return re;
|
return re;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NutMap fetchMap(Sql sql) {
|
||||||
|
sql.setCallback(Sqls.callback.map());
|
||||||
|
execute(sql);
|
||||||
|
NutMap result = (NutMap)sql.getResult();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package com.budwk.app.bpm.param;
|
package com.budwk.app.bpm.param;
|
||||||
|
|
||||||
import com.budwk.app.base.param.PageForm;
|
import com.budwk.app.base.param.PageForm;
|
||||||
import com.budwk.app.bpm.models.BpmProcessInstance;
|
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -10,7 +9,7 @@ import lombok.EqualsAndHashCode;
|
|||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@ApiModel(description = "流程实例查询参数")
|
@ApiModel(description = "流程实例查询参数")
|
||||||
@Data
|
@Data
|
||||||
public class BpmProcessInstancePageForm extends PageForm<BpmProcessInstance> {
|
public class BpmProcessInstancePageForm extends PageForm {
|
||||||
|
|
||||||
@ApiModelProperty("流程实例名称")
|
@ApiModelProperty("流程实例名称")
|
||||||
private String processInstanceName;
|
private String processInstanceName;
|
||||||
|
|||||||
+3
-1
@@ -25,7 +25,7 @@ import java.util.Map;
|
|||||||
@IocBean
|
@IocBean
|
||||||
@At("/flow/todoCenter")
|
@At("/flow/todoCenter")
|
||||||
@Ok("json:full")
|
@Ok("json:full")
|
||||||
public class FlowTodoCenter {
|
public class FlowTodoCenterController {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private Dao dao;
|
private Dao dao;
|
||||||
@@ -44,6 +44,7 @@ public class FlowTodoCenter {
|
|||||||
Sql sql = Sqls.create("""
|
Sql sql = Sqls.create("""
|
||||||
SELECT
|
SELECT
|
||||||
t.id AS taskId,
|
t.id AS taskId,
|
||||||
|
t.taskName AS taskKey,
|
||||||
t.displayName AS taskName,
|
t.displayName AS taskName,
|
||||||
t.taskState,
|
t.taskState,
|
||||||
t.formKey,
|
t.formKey,
|
||||||
@@ -79,6 +80,7 @@ public class FlowTodoCenter {
|
|||||||
Sql sql = Sqls.create("""
|
Sql sql = Sqls.create("""
|
||||||
SELECT
|
SELECT
|
||||||
t.id AS taskId,
|
t.id AS taskId,
|
||||||
|
t.taskName AS taskKey,
|
||||||
t.displayName AS taskName,
|
t.displayName AS taskName,
|
||||||
t.taskState,
|
t.taskState,
|
||||||
t.formKey,
|
t.formKey,
|
||||||
+41
@@ -0,0 +1,41 @@
|
|||||||
|
package com.budwk.app.flow.handler;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.budwk.app.base.constant.RoleConstant;
|
||||||
|
import com.budwk.app.base.exception.BaseException;
|
||||||
|
import com.budwk.app.flow.engine.AssignmentHandler;
|
||||||
|
import com.budwk.app.flow.engine.core.Execution;
|
||||||
|
import com.budwk.app.flow.engine.core.ServiceContext;
|
||||||
|
import com.budwk.app.flow.engine.model.TaskModel;
|
||||||
|
import com.budwk.app.sys.models.Sys_user;
|
||||||
|
import com.budwk.app.sys.models.Sys_user_role;
|
||||||
|
import com.budwk.app.web.controllers.open.commons.service.CommonService;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取协会审批人根据流程变量参数(clubId) 必传
|
||||||
|
*/
|
||||||
|
public class FlowClubPresidentByArgsAssignmentHandler implements AssignmentHandler {
|
||||||
|
@Override
|
||||||
|
public List<String> assign(TaskModel model, Execution execution) {
|
||||||
|
String clubId = execution.getArgs().getStr("clubId");
|
||||||
|
if (StrUtil.isBlank(clubId)) {
|
||||||
|
throw new BaseException("参数 clubId 不能为空");
|
||||||
|
}
|
||||||
|
|
||||||
|
CommonService commonService = ServiceContext.find(CommonService.class);
|
||||||
|
List<Sys_user> users = commonService.findUserInfoByRoleCode(Sys_user_role::getClubId, clubId, RoleConstant.CLUB_PRESIDENT);
|
||||||
|
return users.stream().map(Sys_user::getId).toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getMessage() {
|
||||||
|
return "获取协会会长(根据args中的clubId)";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getOrder() {
|
||||||
|
return AssignmentHandler.super.getOrder();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package com.budwk.app.flow.listenter;
|
||||||
|
|
||||||
|
import com.budwk.app.flow.engine.event.ProcessEvent;
|
||||||
|
import com.budwk.app.flow.engine.event.ProcessEventListener;
|
||||||
|
import com.budwk.app.flow.enums.ProcessEventTypeEnum;
|
||||||
|
import org.nutz.ioc.loader.annotation.IocBean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流程实例开始事件监听器
|
||||||
|
*/
|
||||||
|
@IocBean
|
||||||
|
public class ProcessInstanceStartEventListener implements ProcessEventListener {
|
||||||
|
@Override
|
||||||
|
public void onEvent(ProcessEvent event) {
|
||||||
|
// TODO: 可以对接到学校OA的流程实例进行同步
|
||||||
|
if (event.getEventType() == ProcessEventTypeEnum.PROCESS_INSTANCE_START) {
|
||||||
|
Long sourceId = event.getSourceId();
|
||||||
|
System.out.println("流程实例开始事件:" + sourceId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package com.budwk.app.flow.listenter;
|
||||||
|
|
||||||
|
import com.budwk.app.flow.engine.event.ProcessEvent;
|
||||||
|
import com.budwk.app.flow.engine.event.ProcessEventListener;
|
||||||
|
import com.budwk.app.flow.entity.ProcessTask;
|
||||||
|
import com.budwk.app.flow.enums.ProcessEventTypeEnum;
|
||||||
|
import org.nutz.dao.Dao;
|
||||||
|
import org.nutz.ioc.loader.annotation.Inject;
|
||||||
|
import org.nutz.ioc.loader.annotation.IocBean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流程任务完成事件监听器
|
||||||
|
*/
|
||||||
|
@IocBean
|
||||||
|
public class ProcessTaskEndEventListener implements ProcessEventListener {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private Dao dao;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEvent(ProcessEvent event) {
|
||||||
|
if (event.getEventType() == ProcessEventTypeEnum.PROCESS_TASK_END) {
|
||||||
|
Long sourceId = event.getSourceId();
|
||||||
|
ProcessTask task = dao.fetch(ProcessTask.class, sourceId);
|
||||||
|
System.out.println("流程任务完成事件:" + task.getDisplayName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
package com.budwk.app.flow.listenter;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.budwk.app.flow.constant.FlowConst;
|
||||||
|
import com.budwk.app.flow.engine.event.ProcessEvent;
|
||||||
|
import com.budwk.app.flow.engine.event.ProcessEventListener;
|
||||||
|
import com.budwk.app.flow.entity.ProcessInstance;
|
||||||
|
import com.budwk.app.flow.entity.ProcessTask;
|
||||||
|
import com.budwk.app.flow.entity.ProcessTaskActor;
|
||||||
|
import com.budwk.app.flow.enums.ProcessEventTypeEnum;
|
||||||
|
import org.nutz.dao.Cnd;
|
||||||
|
import org.nutz.dao.Dao;
|
||||||
|
import org.nutz.ioc.loader.annotation.Inject;
|
||||||
|
import org.nutz.ioc.loader.annotation.IocBean;
|
||||||
|
import org.nutz.json.Json;
|
||||||
|
import org.nutz.lang.util.NutMap;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流程任务开始监听器
|
||||||
|
*/
|
||||||
|
@IocBean
|
||||||
|
public class ProcessTaskStartEventListener implements ProcessEventListener {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private Dao dao;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEvent(ProcessEvent event) {
|
||||||
|
if (event.getEventType() == ProcessEventTypeEnum.PROCESS_TASK_START) {
|
||||||
|
Long sourceId = event.getSourceId();
|
||||||
|
ProcessTask task = dao.fetch(ProcessTask.class, sourceId);
|
||||||
|
sendMessage( task);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void sendMessage(ProcessTask task) {
|
||||||
|
// 说明是流程开始 用户首次完成任务
|
||||||
|
if (task.getTaskParentId() == 0 && task.getTaskName().equals("startTask")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 节点名称
|
||||||
|
String taskDisplayName = task.getDisplayName();
|
||||||
|
// 实例名称
|
||||||
|
Long instanceId = task.getProcessInstanceId();
|
||||||
|
ProcessInstance instance = dao.fetch(ProcessInstance.class, instanceId);
|
||||||
|
String instanceName = Json.fromJson(NutMap.class, instance.getVariable()).getString(FlowConst.PROCESS_INSTANCE_NAME);
|
||||||
|
|
||||||
|
// 任务接收人
|
||||||
|
List<ProcessTaskActor> taskActors = dao.query(ProcessTaskActor.class, Cnd.where(ProcessTaskActor::getProcessTaskId, "=", task.getId()));
|
||||||
|
|
||||||
|
for (ProcessTaskActor taskActor : taskActors) {
|
||||||
|
// 模拟发送消息
|
||||||
|
String message = StrUtil.format("{}您有一条待办任务,实例:{},任务:{}", taskActor.getActorName(), instanceName, taskDisplayName);
|
||||||
|
System.out.println(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
package com.budwk.app.sys.param;
|
package com.budwk.app.sys.param;
|
||||||
|
|
||||||
import com.budwk.app.base.param.PageForm;
|
import com.budwk.app.base.param.PageForm;
|
||||||
import com.budwk.app.sys.models.Sys_user_source;
|
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -10,7 +9,7 @@ import lombok.EqualsAndHashCode;
|
|||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
@ApiModel("用户数据拉取分页参数")
|
@ApiModel("用户数据拉取分页参数")
|
||||||
public class SysDataUserPullPageForm extends PageForm<Sys_user_source> {
|
public class SysDataUserPullPageForm extends PageForm {
|
||||||
|
|
||||||
@ApiModelProperty("拉取日期")
|
@ApiModelProperty("拉取日期")
|
||||||
private String pullTime;
|
private String pullTime;
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package com.budwk.app.sys.param;
|
package com.budwk.app.sys.param;
|
||||||
|
|
||||||
import com.budwk.app.base.param.PageForm;
|
import com.budwk.app.base.param.PageForm;
|
||||||
import com.budwk.app.sys.views.View_user;
|
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -10,7 +9,7 @@ import lombok.EqualsAndHashCode;
|
|||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
@ApiModel("用户数据更新分页参数")
|
@ApiModel("用户数据更新分页参数")
|
||||||
public class SysDataUserUpdatePageForm extends PageForm<View_user> {
|
public class SysDataUserUpdatePageForm extends PageForm {
|
||||||
|
|
||||||
@ApiModelProperty("姓名")
|
@ApiModelProperty("姓名")
|
||||||
private String userName;
|
private String userName;
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package com.budwk.app.sys.param;
|
package com.budwk.app.sys.param;
|
||||||
|
|
||||||
import com.budwk.app.base.param.PageForm;
|
import com.budwk.app.base.param.PageForm;
|
||||||
import com.budwk.app.sys.models.Sys_home_activity;
|
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -10,7 +9,7 @@ import lombok.EqualsAndHashCode;
|
|||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
@ApiModel("系统首页活动管理查询参数")
|
@ApiModel("系统首页活动管理查询参数")
|
||||||
public class SysHomeActivityPageForm extends PageForm<Sys_home_activity> {
|
public class SysHomeActivityPageForm extends PageForm {
|
||||||
|
|
||||||
@ApiModelProperty("活动名称")
|
@ApiModelProperty("活动名称")
|
||||||
private String name;
|
private String name;
|
||||||
|
|||||||
+1
-2
@@ -5,7 +5,6 @@ import com.budwk.app.base.constant.RoleConstant;
|
|||||||
import com.budwk.app.base.param.PageForm;
|
import com.budwk.app.base.param.PageForm;
|
||||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||||
import com.budwk.app.zhgh.activity.declarereimbursement.declare.models.ActivityDeclareInfo;
|
|
||||||
import com.budwk.app.zhgh.activity.declarereimbursement.enums.ActivityDeclareReimbursement;
|
import com.budwk.app.zhgh.activity.declarereimbursement.enums.ActivityDeclareReimbursement;
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -23,7 +22,7 @@ import org.nutz.dao.util.cri.SqlExpressionGroup;
|
|||||||
@Data
|
@Data
|
||||||
@ApiModel("通用分页参数")
|
@ApiModel("通用分页参数")
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
public class CommonPageParam extends PageForm<ActivityDeclareInfo> {
|
public class CommonPageParam extends PageForm {
|
||||||
|
|
||||||
private Integer year;
|
private Integer year;
|
||||||
|
|
||||||
|
|||||||
+2
@@ -114,6 +114,8 @@ public class ArticleClubApprovalController {
|
|||||||
} else {
|
} else {
|
||||||
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
|
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
|
||||||
}
|
}
|
||||||
|
cnd.groupBy("t.id");
|
||||||
|
cnd.desc("t.createdAt");
|
||||||
sql.setCondition(cnd);
|
sql.setCondition(cnd);
|
||||||
Pagination<NutMap> pageVO = articleService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
Pagination<NutMap> pageVO = articleService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||||
return Result.success(pageVO);
|
return Result.success(pageVO);
|
||||||
|
|||||||
+23
-4
@@ -5,6 +5,7 @@ import cn.hutool.core.util.StrUtil;
|
|||||||
import com.budwk.app.base.page.Pagination;
|
import com.budwk.app.base.page.Pagination;
|
||||||
import com.budwk.app.base.result.Result;
|
import com.budwk.app.base.result.Result;
|
||||||
import com.budwk.app.base.utils.PageUtil;
|
import com.budwk.app.base.utils.PageUtil;
|
||||||
|
import com.budwk.app.flow.enums.ProcessInstanceStateEnum;
|
||||||
import com.budwk.app.zhgh.dayofficework.article.param.ArticleInfoPageParam;
|
import com.budwk.app.zhgh.dayofficework.article.param.ArticleInfoPageParam;
|
||||||
import com.budwk.app.zhgh.dayofficework.article.service.ArticleService;
|
import com.budwk.app.zhgh.dayofficework.article.service.ArticleService;
|
||||||
import com.budwk.app.zhgh.dayofficework.article.vo.ArticleInfoPageVO;
|
import com.budwk.app.zhgh.dayofficework.article.vo.ArticleInfoPageVO;
|
||||||
@@ -42,15 +43,34 @@ public class ArticleQueryController {
|
|||||||
public Result pageData(@Valid ArticleInfoPageParam pageForm) {
|
public Result pageData(@Valid ArticleInfoPageParam pageForm) {
|
||||||
Sql sql = Sqls.create("""
|
Sql sql = Sqls.create("""
|
||||||
SELECT
|
SELECT
|
||||||
info.*,
|
info.id,
|
||||||
|
info.title,
|
||||||
|
info.userName,
|
||||||
|
info.loginName,
|
||||||
|
info.unitName,
|
||||||
|
info.unionName,
|
||||||
|
info.submitTime,
|
||||||
|
info.origin,
|
||||||
ins.id AS instanceId,
|
ins.id AS instanceId,
|
||||||
ins.processDefineId instanceProcessDefineId
|
ins.businessNo,
|
||||||
|
ins.state instanceState,
|
||||||
|
ins.variable instanceVariable,
|
||||||
|
t.id taskId,
|
||||||
|
t.taskName AS taskKey,
|
||||||
|
t.displayName taskName,
|
||||||
|
t.taskType,
|
||||||
|
t.performType taskPerformType,
|
||||||
|
t.taskState,
|
||||||
|
t.finishTime
|
||||||
FROM
|
FROM
|
||||||
article info
|
article info
|
||||||
LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id
|
LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id
|
||||||
|
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10
|
||||||
|
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
|
||||||
$condition
|
$condition
|
||||||
""");
|
""");
|
||||||
Cnd cnd = Cnd.NEW();
|
Cnd cnd = Cnd.NEW();
|
||||||
|
cnd.and("ins.state","=", ProcessInstanceStateEnum.FINISHED.getCode());
|
||||||
cnd.andEX("YEAR(info.submitTime)", "=", pageForm.getYear());
|
cnd.andEX("YEAR(info.submitTime)", "=", pageForm.getYear());
|
||||||
if (StrUtil.isNotBlank(pageForm.getTitle())) {
|
if (StrUtil.isNotBlank(pageForm.getTitle())) {
|
||||||
cnd.and(Cnd.likeEX("info.title", pageForm.getTitle()));
|
cnd.and(Cnd.likeEX("info.title", pageForm.getTitle()));
|
||||||
@@ -65,7 +85,6 @@ public class ArticleQueryController {
|
|||||||
}else{
|
}else{
|
||||||
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
|
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
|
||||||
}
|
}
|
||||||
|
|
||||||
cnd.groupBy("info.id");
|
cnd.groupBy("info.id");
|
||||||
sql.setCondition(cnd);
|
sql.setCondition(cnd);
|
||||||
Pagination<ArticleInfoPageVO> pageVO = articleService.listPageVO(pageForm, sql, ArticleInfoPageVO.class);
|
Pagination<ArticleInfoPageVO> pageVO = articleService.listPageVO(pageForm, sql, ArticleInfoPageVO.class);
|
||||||
|
|||||||
+3
@@ -87,6 +87,7 @@ public class ArticleWriteController {
|
|||||||
args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode());
|
args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode());
|
||||||
args.set(FlowConst.FORM_DATA, article);
|
args.set(FlowConst.FORM_DATA, article);
|
||||||
args.set("origin", article.getOrigin());
|
args.set("origin", article.getOrigin());
|
||||||
|
args.set("clubId",article.getClubId());
|
||||||
ProcessInstance instance = flowEngine.startProcessInstanceByKey("XWTG", article.getId(), SecurityUtil.getUserId(), args);
|
ProcessInstance instance = flowEngine.startProcessInstanceByKey("XWTG", article.getId(), SecurityUtil.getUserId(), args);
|
||||||
|
|
||||||
// 自动完成第一个申请任务
|
// 自动完成第一个申请任务
|
||||||
@@ -109,6 +110,8 @@ public class ArticleWriteController {
|
|||||||
Dict dict = Dict.create();
|
Dict dict = Dict.create();
|
||||||
dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId);
|
dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId);
|
||||||
dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.RE_APPLY.getCode());
|
dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.RE_APPLY.getCode());
|
||||||
|
dict.set("origin", article.getOrigin());
|
||||||
|
dict.set("clubId",article.getClubId());
|
||||||
flowCommonService.executeTask(dict);
|
flowCommonService.executeTask(dict);
|
||||||
return Result.success();
|
return Result.success();
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -1,7 +1,6 @@
|
|||||||
package com.budwk.app.zhgh.dayofficework.article.param;
|
package com.budwk.app.zhgh.dayofficework.article.param;
|
||||||
|
|
||||||
import com.budwk.app.base.param.PageForm;
|
import com.budwk.app.base.param.PageForm;
|
||||||
import com.budwk.app.zhgh.dayofficework.article.models.Article;
|
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -10,7 +9,7 @@ import lombok.EqualsAndHashCode;
|
|||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
@ApiModel(value = "稿件分页查询参数")
|
@ApiModel(value = "稿件分页查询参数")
|
||||||
public class ArticleInfoPageParam extends PageForm<Article> {
|
public class ArticleInfoPageParam extends PageForm {
|
||||||
|
|
||||||
@ApiModelProperty("稿件标题")
|
@ApiModelProperty("稿件标题")
|
||||||
private String title;
|
private String title;
|
||||||
|
|||||||
+1
-1
@@ -58,7 +58,7 @@ public class EvaluateActivityController {
|
|||||||
@At
|
@At
|
||||||
@SaCheckPermission("evaluation.activity")
|
@SaCheckPermission("evaluation.activity")
|
||||||
@ApiOperation("获取评优评先活动列表")
|
@ApiOperation("获取评优评先活动列表")
|
||||||
public Result pageData(@Valid PageForm<EvaluateActivity> pageForm, Integer year, String searchKeyword) {
|
public Result pageData(@Valid PageForm pageForm, Integer year, String searchKeyword) {
|
||||||
Sql sql = Sqls.create("""
|
Sql sql = Sqls.create("""
|
||||||
SELECT
|
SELECT
|
||||||
eva.*,
|
eva.*,
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package com.budwk.app.zhgh.dayofficework.evaluation.vo;
|
package com.budwk.app.zhgh.dayofficework.evaluation.vo;
|
||||||
|
|
||||||
import com.budwk.app.base.param.PageForm;
|
import com.budwk.app.base.param.PageForm;
|
||||||
import com.budwk.app.zhgh.dayofficework.evaluation.models.EvaluateApply;
|
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -10,7 +9,7 @@ import lombok.EqualsAndHashCode;
|
|||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@ApiModel("评优评先分页参数")
|
@ApiModel("评优评先分页参数")
|
||||||
@Data
|
@Data
|
||||||
public class EvaluatePageForm extends PageForm<EvaluateApply> {
|
public class EvaluatePageForm extends PageForm {
|
||||||
|
|
||||||
@ApiModelProperty("年度")
|
@ApiModelProperty("年度")
|
||||||
private Integer year;
|
private Integer year;
|
||||||
|
|||||||
+1
-1
@@ -13,7 +13,7 @@ import lombok.EqualsAndHashCode;
|
|||||||
*/
|
*/
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
public class GrassrootsCongressPageForm extends PageForm<GrassrootsCongressPageForm> {
|
public class GrassrootsCongressPageForm extends PageForm {
|
||||||
|
|
||||||
private Integer year;
|
private Integer year;
|
||||||
|
|
||||||
|
|||||||
+40
-4
@@ -10,6 +10,7 @@ import com.budwk.app.zhgh.democratic.proposal.service.ProposalExportService;
|
|||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.nutz.dao.Cnd;
|
import org.nutz.dao.Cnd;
|
||||||
|
import org.nutz.dao.Sqls;
|
||||||
import org.nutz.dao.sql.Sql;
|
import org.nutz.dao.sql.Sql;
|
||||||
import org.nutz.ioc.loader.annotation.Inject;
|
import org.nutz.ioc.loader.annotation.Inject;
|
||||||
import org.nutz.ioc.loader.annotation.IocBean;
|
import org.nutz.ioc.loader.annotation.IocBean;
|
||||||
@@ -48,7 +49,34 @@ public class ProposalExportComprehensiveController {
|
|||||||
@SaCheckPermission("proposal.query.comprehensive")
|
@SaCheckPermission("proposal.query.comprehensive")
|
||||||
@ApiOperation(value = "分页列表")
|
@ApiOperation(value = "分页列表")
|
||||||
public Result pageData(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm) {
|
public Result pageData(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm) {
|
||||||
Sql sql = proposalExportService.exportComprehensiveSql(pageForm);
|
Sql sql = Sqls.create("""
|
||||||
|
SELECT
|
||||||
|
info.*,
|
||||||
|
COUNT(p.consolidationIds) > 0 AS isConsolidation,
|
||||||
|
type.name AS typeName,
|
||||||
|
tcs.fullName AS sessionName,
|
||||||
|
tcd.`name` AS delegationName,
|
||||||
|
ins.id AS instanceId,
|
||||||
|
ins.businessNo,
|
||||||
|
ins.state instanceState,
|
||||||
|
ins.variable instanceVariable,
|
||||||
|
ins.processDefineId instanceProcessDefineId,
|
||||||
|
t.displayName curTaskName,
|
||||||
|
JSON_UNQUOTE(JSON_EXTRACT(caseTasks.variable, '$.tf_hostUnitName')) AS masterUnitName,
|
||||||
|
caseTasks.variable->>'$.tf_helpUnitNameStr' AS slaveUnitNames
|
||||||
|
FROM
|
||||||
|
proposal_info info
|
||||||
|
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
|
||||||
|
LEFT JOIN proposal_type type on type.id = info.typeId
|
||||||
|
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
|
||||||
|
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
||||||
|
LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
|
||||||
|
LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id
|
||||||
|
LEFT JOIN (SELECT processInstanceId, MAX(finishTime) AS finishTime FROM wf_process_task WHERE taskName = '9846ab38-40c5-4093-bafc-a9b3b443338b' AND taskState = 20 GROUP BY processInstanceId) latestTasks ON latestTasks.processInstanceId = ins.id
|
||||||
|
LEFT JOIN wf_process_task caseTasks ON caseTasks.processInstanceId = ins.id AND caseTasks.taskName = '9846ab38-40c5-4093-bafc-a9b3b443338b' AND caseTasks.taskState = 20 AND caseTasks.finishTime = latestTasks.finishTime
|
||||||
|
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10
|
||||||
|
$condition
|
||||||
|
""");
|
||||||
Cnd cnd = Cnd.NEW();
|
Cnd cnd = Cnd.NEW();
|
||||||
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
|
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
|
||||||
cnd.groupBy("info.id");
|
cnd.groupBy("info.id");
|
||||||
@@ -60,10 +88,10 @@ public class ProposalExportComprehensiveController {
|
|||||||
|
|
||||||
@At
|
@At
|
||||||
@Ok("void")
|
@Ok("void")
|
||||||
@ApiOperation("导出提案汇总表excel")
|
@ApiOperation("导出汇总表excel")
|
||||||
@SaCheckPermission("proposal.query.comprehensive")
|
@SaCheckPermission("proposal.query.comprehensive")
|
||||||
public void exportProposalSummaryAsExcel(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, HttpServletResponse response){
|
public void exportSummaryAsExcel(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, HttpServletResponse response){
|
||||||
proposalExportService.exportProposalSummaryAsExcel(pageForm, response);
|
proposalExportService.exportSummaryAsExcel(pageForm, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -91,4 +119,12 @@ public class ProposalExportComprehensiveController {
|
|||||||
proposalExportService.exportFeedBackAsZip(pageForm, response);
|
proposalExportService.exportFeedBackAsZip(pageForm, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@Ok("void")
|
||||||
|
@ApiOperation("导出征集表ZIP")
|
||||||
|
@SaCheckPermission("proposal.query.comprehensive")
|
||||||
|
public void exportCollectZip(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, HttpServletResponse response){
|
||||||
|
proposalExportService.exportCollectZip(pageForm, response);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -60,7 +60,7 @@ public class ProposalQueryComprehensiveController {
|
|||||||
ins.processDefineId instanceProcessDefineId,
|
ins.processDefineId instanceProcessDefineId,
|
||||||
t.displayName curTaskName,
|
t.displayName curTaskName,
|
||||||
JSON_UNQUOTE(JSON_EXTRACT(caseTasks.variable, '$.tf_hostUnitName')) AS masterUnitName,
|
JSON_UNQUOTE(JSON_EXTRACT(caseTasks.variable, '$.tf_hostUnitName')) AS masterUnitName,
|
||||||
JSON_EXTRACT(caseTasks.variable, '$.tf_helpUnitNames') AS slaveUnitNames
|
caseTasks.variable->>'$.tf_helpUnitNameStr' AS slaveUnitNames
|
||||||
FROM
|
FROM
|
||||||
proposal_info info
|
proposal_info info
|
||||||
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
|
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
|
||||||
|
|||||||
+1
-1
@@ -53,7 +53,7 @@ public class ProposalQueryHistoryController {
|
|||||||
ins.processDefineId instanceProcessDefineId,
|
ins.processDefineId instanceProcessDefineId,
|
||||||
t.displayName curTaskName,
|
t.displayName curTaskName,
|
||||||
JSON_UNQUOTE(JSON_EXTRACT(caseTasks.variable, '$.tf_hostUnitName')) AS masterUnitName,
|
JSON_UNQUOTE(JSON_EXTRACT(caseTasks.variable, '$.tf_hostUnitName')) AS masterUnitName,
|
||||||
JSON_EXTRACT(caseTasks.variable, '$.tf_helpUnitNames') AS slaveUnitNames
|
caseTasks.variable->>'$.tf_helpUnitNameStr' AS slaveUnitNames
|
||||||
FROM
|
FROM
|
||||||
proposal_info info
|
proposal_info info
|
||||||
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
|
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
|
||||||
|
|||||||
+11
-5
@@ -91,11 +91,12 @@ public class ProposalQueryUnitReplyController {
|
|||||||
for (String underTakeId : underTakeIds) {
|
for (String underTakeId : underTakeIds) {
|
||||||
NutMap tableRow = NutMap.NEW();
|
NutMap tableRow = NutMap.NEW();
|
||||||
tableRow.put("id", underTakeId);
|
tableRow.put("id", underTakeId);
|
||||||
|
if(undertakeMap.get(underTakeId) == null){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
tableRow.put("name", undertakeMap.get(underTakeId).getName());
|
tableRow.put("name", undertakeMap.get(underTakeId).getName());
|
||||||
|
|
||||||
//找出承办提案总数
|
//找出承办提案总数
|
||||||
// long sum = caseTasks.stream().filter(v -> (Json.fromJson(NutMap.class, v.getVariable())).getString("tf_hostUnitId").equals(underTakeId) || (Json.fromJson(NutMap.class, v.getVariable())).getAsList("helpUnitIds", String.class).contains(underTakeId)).map(ProcessTask::getProcessInstanceId).collect(Collectors.toSet()).size();
|
|
||||||
|
|
||||||
long sum = caseTasks.stream()
|
long sum = caseTasks.stream()
|
||||||
.filter(v -> {
|
.filter(v -> {
|
||||||
NutMap variable = Json.fromJson(NutMap.class, v.getVariable());
|
NutMap variable = Json.fromJson(NutMap.class, v.getVariable());
|
||||||
@@ -115,17 +116,22 @@ public class ProposalQueryUnitReplyController {
|
|||||||
.distinct()
|
.distinct()
|
||||||
.count();
|
.count();
|
||||||
|
|
||||||
//找出主办提案数量
|
// 主办提案数量
|
||||||
long hostSum = masterUnitTasks.stream().map(v -> Json.fromJson(NutMap.class, v.getVariable())).filter(variable -> underTakeId.equals(variable.getString("unitId")) && variable.getBoolean("isMaster")).count();
|
long hostSum = masterUnitTasks.stream().map(v -> Json.fromJson(NutMap.class, v.getVariable())).filter(variable -> underTakeId.equals(variable.getString("unitId")) && variable.getBoolean("isMaster")).count();
|
||||||
//主办已答复的数量
|
// 主办已答复的数量
|
||||||
long hostReplySum = masterUnitTasks.stream().filter(v -> Objects.equals(v.getTaskState(), ProcessTaskStateEnum.FINISHED.getCode())).map(v -> Json.fromJson(NutMap.class, v.getVariable())).filter(variable -> underTakeId.equals(variable.getString("unitId")) && variable.getBoolean("isMaster")).count();
|
long hostReplySum = masterUnitTasks.stream().filter(v -> Objects.equals(v.getTaskState(), ProcessTaskStateEnum.FINISHED.getCode())).map(v -> Json.fromJson(NutMap.class, v.getVariable())).filter(variable -> underTakeId.equals(variable.getString("unitId")) && variable.getBoolean("isMaster")).count();
|
||||||
//主办未答复的数量
|
// 主办未答复的数量
|
||||||
long hostNoReplySum = hostSum - hostReplySum;
|
long hostNoReplySum = hostSum - hostReplySum;
|
||||||
|
|
||||||
|
|
||||||
|
// 协办提案数量
|
||||||
|
long slaveSum = slaveUnitTasks.stream().map(v -> Json.fromJson(NutMap.class, v.getVariable())).filter(variable -> underTakeId.equals(variable.getString("unitId")) && !variable.getBoolean("isMaster")).count();
|
||||||
|
|
||||||
tableRow.put("sum", sum);
|
tableRow.put("sum", sum);
|
||||||
tableRow.put("hostSum", hostSum);
|
tableRow.put("hostSum", hostSum);
|
||||||
tableRow.put("hostReplySum", hostReplySum);
|
tableRow.put("hostReplySum", hostReplySum);
|
||||||
tableRow.put("hostNoReplySum", hostNoReplySum);
|
tableRow.put("hostNoReplySum", hostNoReplySum);
|
||||||
|
tableRow.put("slaveSum", slaveSum);
|
||||||
|
|
||||||
// if (slaveNeedReply) {
|
// if (slaveNeedReply) {
|
||||||
// //协办提案数量
|
// //协办提案数量
|
||||||
|
|||||||
@@ -112,6 +112,11 @@ public class ProposalInfo extends BaseModel {
|
|||||||
@ColDefine(type = ColType.TEXT)
|
@ColDefine(type = ColType.TEXT)
|
||||||
private String excerpt;
|
private String excerpt;
|
||||||
|
|
||||||
|
@Column
|
||||||
|
@Comment("调研情况")
|
||||||
|
@ColDefine(type = ColType.TEXT)
|
||||||
|
private String researchFindings;
|
||||||
|
|
||||||
@Column
|
@Column
|
||||||
@Comment("案由")
|
@Comment("案由")
|
||||||
@ColDefine(type = ColType.TEXT)
|
@ColDefine(type = ColType.TEXT)
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package com.budwk.app.zhgh.democratic.proposal.param;
|
|||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.budwk.app.base.param.PageForm;
|
import com.budwk.app.base.param.PageForm;
|
||||||
import com.budwk.app.base.utils.PageUtil;
|
import com.budwk.app.base.utils.PageUtil;
|
||||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import org.nutz.dao.Cnd;
|
import org.nutz.dao.Cnd;
|
||||||
@@ -13,7 +12,7 @@ import org.nutz.dao.Cnd;
|
|||||||
*/
|
*/
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
public class ProposalSearchParam extends PageForm<ProposalInfo> {
|
public class ProposalSearchParam extends PageForm {
|
||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
private String code;
|
private String code;
|
||||||
|
|||||||
+23
-1
@@ -6,6 +6,7 @@ import com.budwk.app.zhgh.democratic.proposal.param.ProposalQueryComprehensivePa
|
|||||||
import org.nutz.dao.sql.Sql;
|
import org.nutz.dao.sql.Sql;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
@@ -18,6 +19,7 @@ public interface ProposalExportService extends BaseService<ProposalInfo> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 某些页面的公共SQL,用于导出或者综合查询
|
* 某些页面的公共SQL,用于导出或者综合查询
|
||||||
|
*
|
||||||
* @param pageForm
|
* @param pageForm
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@@ -25,13 +27,15 @@ public interface ProposalExportService extends BaseService<ProposalInfo> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 导出提案汇总表excel
|
* 导出提案汇总表excel
|
||||||
|
*
|
||||||
* @param pageForm
|
* @param pageForm
|
||||||
* @param response
|
* @param response
|
||||||
*/
|
*/
|
||||||
void exportProposalSummaryAsExcel(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response);
|
void exportSummaryAsExcel(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 导出提案立案汇总表excel
|
* 导出提案立案汇总表excel
|
||||||
|
*
|
||||||
* @param pageForm
|
* @param pageForm
|
||||||
* @param response
|
* @param response
|
||||||
*/
|
*/
|
||||||
@@ -39,6 +43,7 @@ public interface ProposalExportService extends BaseService<ProposalInfo> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 导出提案统计表zip
|
* 导出提案统计表zip
|
||||||
|
*
|
||||||
* @param pageForm
|
* @param pageForm
|
||||||
* @param response
|
* @param response
|
||||||
*/
|
*/
|
||||||
@@ -46,8 +51,25 @@ public interface ProposalExportService extends BaseService<ProposalInfo> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 导出反馈表
|
* 导出反馈表
|
||||||
|
*
|
||||||
* @param pageForm
|
* @param pageForm
|
||||||
* @param response
|
* @param response
|
||||||
*/
|
*/
|
||||||
void exportFeedBackAsZip(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response);
|
void exportFeedBackAsZip(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出征集表docx
|
||||||
|
* @param id
|
||||||
|
* @param byteArrayOutputStream
|
||||||
|
*/
|
||||||
|
void exportCollectDocx(String id, ByteArrayOutputStream byteArrayOutputStream);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出征集表zip
|
||||||
|
*
|
||||||
|
* @param pageForm
|
||||||
|
* @param response
|
||||||
|
*/
|
||||||
|
void exportCollectZip(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response);
|
||||||
}
|
}
|
||||||
|
|||||||
+8
@@ -32,6 +32,14 @@ public interface ProposalCommonService extends BaseService<ProposalInfo> {
|
|||||||
*/
|
*/
|
||||||
void exportProposalFeedBackAsDocx(String id,ByteArrayOutputStream byteArrayOutputStream);
|
void exportProposalFeedBackAsDocx(String id,ByteArrayOutputStream byteArrayOutputStream);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出征集表
|
||||||
|
* @param id
|
||||||
|
* @param byteArrayOutputStream
|
||||||
|
*/
|
||||||
|
void exportCollectAsDocx(String id, ByteArrayOutputStream byteArrayOutputStream);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据提案id查询团长
|
* 根据提案id查询团长
|
||||||
*
|
*
|
||||||
|
|||||||
+80
-181
@@ -18,11 +18,17 @@ import com.budwk.app.bpm.models.BpmProcessTask;
|
|||||||
import com.budwk.app.bpm.service.BpmService;
|
import com.budwk.app.bpm.service.BpmService;
|
||||||
import com.budwk.app.bpm.vo.BpmProcessTaskVo;
|
import com.budwk.app.bpm.vo.BpmProcessTaskVo;
|
||||||
import com.budwk.app.bpm.vo.BpmTaskApprovalRecordVo;
|
import com.budwk.app.bpm.vo.BpmTaskApprovalRecordVo;
|
||||||
|
import com.budwk.app.flow.constant.FlowConst;
|
||||||
|
import com.budwk.app.flow.entity.ProcessInstance;
|
||||||
|
import com.budwk.app.flow.entity.ProcessTask;
|
||||||
|
import com.budwk.app.flow.enums.ProcessInstanceStateEnum;
|
||||||
|
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
||||||
import com.budwk.app.sys.models.Sys_role;
|
import com.budwk.app.sys.models.Sys_role;
|
||||||
import com.budwk.app.sys.models.Sys_user;
|
import com.budwk.app.sys.models.Sys_user;
|
||||||
import com.budwk.app.sys.models.Sys_user_role;
|
import com.budwk.app.sys.models.Sys_user_role;
|
||||||
import com.budwk.app.sys.services.SysRoleService;
|
import com.budwk.app.sys.services.SysRoleService;
|
||||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||||
|
import com.budwk.app.web.commons.base.Globals;
|
||||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalConsolidation;
|
import com.budwk.app.zhgh.democratic.proposal.models.ProposalConsolidation;
|
||||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||||
import com.budwk.app.zhgh.democratic.teachercongress.prepare.models.Teacher_congress_session;
|
import com.budwk.app.zhgh.democratic.teachercongress.prepare.models.Teacher_congress_session;
|
||||||
@@ -204,187 +210,6 @@ public class ProposalCommonServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
|||||||
|
|
||||||
docData.put("info", info);
|
docData.put("info", info);
|
||||||
|
|
||||||
//查询附议人信息
|
|
||||||
BpmProcessInstance bpmProcessInstance = dao().fetch(BpmProcessInstance.class, Cnd.where(BpmProcessInstance::getProcessInstanceBusinessId, "=", id));
|
|
||||||
BpmProcessTask lastestWriteTask = dao().fetch(BpmProcessTask.class, Cnd.where(BpmProcessTask::getProcessInstanceId, "=", bpmProcessInstance.getId())
|
|
||||||
.and(BpmProcessTask::getTaskStatus, "=", BpmProcessTaskStatusEnum.COMPLETE.name())
|
|
||||||
.and(BpmProcessTask::getProcessTaskNodeCode, "=", 10)
|
|
||||||
.and(BpmProcessTask::getDelFlag, "=", 0)
|
|
||||||
.desc(BpmProcessTask::getEndOn)
|
|
||||||
);
|
|
||||||
|
|
||||||
if (ObjectUtil.isNotEmpty(lastestWriteTask)) {
|
|
||||||
String lastestWriteTaskId = lastestWriteTask.getId();
|
|
||||||
List<BpmProcessTask> seconderTasks = dao().query(BpmProcessTask.class, Cnd.where(BpmProcessTask::getPrevTaskId, "=", lastestWriteTaskId)
|
|
||||||
.and(BpmProcessTask::getProcessInstanceId, "=", bpmProcessInstance.getId())
|
|
||||||
.and(BpmProcessTask::getTaskStatus, "!=", BpmProcessTaskStatusEnum.REVOKE.name())
|
|
||||||
.and(BpmProcessTask::getDelFlag, "=", 0)
|
|
||||||
.asc(BpmProcessTask::getCreatedOn)
|
|
||||||
);
|
|
||||||
List<HashMap<String, Object>> seconders = seconderTasks.stream().filter(v -> v.getTaskStatus().equals(BpmProcessTaskStatusEnum.COMPLETE.name()) && ObjectUtil.isNotEmpty(v.getExtVariable().getStr("bpmTaskApprovalType").equals("PASS"))).map(v -> {
|
|
||||||
HashMap<String, Object> seconderApproval = new HashMap<>();
|
|
||||||
seconderApproval.put("userName", v.getCreateVariable().getStr("userName"));
|
|
||||||
seconderApproval.put("loginName", v.getCreateVariable().getStr("loginName"));
|
|
||||||
seconderApproval.put("unitName", v.getCreateVariable().getStr("unitName"));
|
|
||||||
return seconderApproval;
|
|
||||||
}).toList();
|
|
||||||
|
|
||||||
docData.put("seconders", seconders);
|
|
||||||
}
|
|
||||||
|
|
||||||
//审批记录
|
|
||||||
List<BpmTaskApprovalRecordVo> nodeTasks = bpmService.getNodeTasks(BpmProcessConstant.PROPOSAL, id);
|
|
||||||
|
|
||||||
//团长审核
|
|
||||||
nodeTasks.stream().filter(v -> v.getNodeCode() == 30)
|
|
||||||
.flatMap(v -> v.getTasks().stream())
|
|
||||||
.max(Comparator.comparing(BpmProcessTaskVo::getEndOn))
|
|
||||||
.ifPresent(v -> {
|
|
||||||
HashMap<String, Object> delegationApproval = new HashMap<>();
|
|
||||||
delegationApproval.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日"));
|
|
||||||
delegationApproval.put("user", v.getActualOwnerUserName());
|
|
||||||
if (ObjectUtil.isNotEmpty(v.getExtVariable())) {
|
|
||||||
delegationApproval.put("opinion", v.getExtVariable().getStr("approvalOpinion"));
|
|
||||||
delegationApproval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v.getExtVariable().getStr("approvalSignature")));
|
|
||||||
}
|
|
||||||
docData.put("tz", delegationApproval);
|
|
||||||
});
|
|
||||||
|
|
||||||
//委员会立案
|
|
||||||
nodeTasks.stream().filter(v -> v.getNodeCode() == 60)
|
|
||||||
.flatMap(v -> v.getTasks().stream())
|
|
||||||
.max(Comparator.comparing(BpmProcessTaskVo::getEndOn))
|
|
||||||
.ifPresent(v -> {
|
|
||||||
HashMap<String, Object> committeeApproval = new HashMap<>();
|
|
||||||
committeeApproval.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日"));
|
|
||||||
committeeApproval.put("user", v.getActualOwnerUserName());
|
|
||||||
if (ObjectUtil.isNotEmpty(v.getExtVariable())) {
|
|
||||||
committeeApproval.put("opinion", v.getExtVariable().getStr("approvalOpinion"));
|
|
||||||
committeeApproval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v.getExtVariable().getStr("approvalSignature")));
|
|
||||||
committeeApproval.put("hostUnit", v.getExtVariable().getStr("hostUnit"));
|
|
||||||
if (ObjectUtil.isNotEmpty(v.getExtVariable().getBeanList("helpUnits", String.class))) {
|
|
||||||
committeeApproval.put("helpUnits", String.join("、", v.getExtVariable().getBeanList("helpUnits", String.class)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
docData.put("wyh", committeeApproval);
|
|
||||||
});
|
|
||||||
|
|
||||||
//委员会确认承办单位
|
|
||||||
nodeTasks.stream().filter(v -> v.getNodeCode() == 70)
|
|
||||||
.flatMap(v -> v.getTasks().stream())
|
|
||||||
.max(Comparator.comparing(BpmProcessTaskVo::getEndOn))
|
|
||||||
.ifPresent(v -> {
|
|
||||||
HashMap<String, Object> committeeConfirm = new HashMap<>();
|
|
||||||
committeeConfirm.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日"));
|
|
||||||
committeeConfirm.put("user", v.getActualOwnerUserName());
|
|
||||||
if (ObjectUtil.isNotEmpty(v.getExtVariable())) {
|
|
||||||
committeeConfirm.put("opinion", v.getExtVariable().getStr("approvalOpinion"));
|
|
||||||
committeeConfirm.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v.getExtVariable().getStr("approvalSignature")));
|
|
||||||
committeeConfirm.put("hostUnit", v.getExtVariable().getStr("hostUnit"));
|
|
||||||
if (ObjectUtil.isNotEmpty(v.getExtVariable().getBeanList("helpUnits", String.class))) {
|
|
||||||
committeeConfirm.put("helpUnits", String.join("、", v.getExtVariable().getBeanList("helpUnits", String.class)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
docData.put("wyhConfirm", committeeConfirm);
|
|
||||||
});
|
|
||||||
|
|
||||||
//主办单位答复
|
|
||||||
nodeTasks.stream().filter(v -> v.getNodeCode() == 80)
|
|
||||||
.flatMap(v -> v.getTasks().stream())
|
|
||||||
.filter(v1 -> ObjectUtil.isNotEmpty(v1.getCreateVariable()) && v1.getCreateVariable().getBool("isMaster"))
|
|
||||||
.max(Comparator.comparing(BpmProcessTaskVo::getEndOn))
|
|
||||||
.ifPresent(v -> {
|
|
||||||
HashMap<String, Object> masterUnderTakeReply = new HashMap<>();
|
|
||||||
masterUnderTakeReply.put("name", v.getCreateVariable().getStr("underTakeName"));
|
|
||||||
masterUnderTakeReply.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日"));
|
|
||||||
masterUnderTakeReply.put("user", v.getActualOwnerUserName());
|
|
||||||
if (ObjectUtil.isNotEmpty(v.getExtVariable())) {
|
|
||||||
masterUnderTakeReply.put("opinion", v.getExtVariable().getStr("approvalOpinion"));
|
|
||||||
masterUnderTakeReply.put("implementState", v.getExtVariable().getStr("implementState"));
|
|
||||||
masterUnderTakeReply.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v.getExtVariable().getStr("approvalSignature")));
|
|
||||||
}
|
|
||||||
docData.put("zbdf", masterUnderTakeReply);
|
|
||||||
});
|
|
||||||
|
|
||||||
//协办单位答复
|
|
||||||
List<HashMap<String, Object>> slaveUnderTakeReplyList = new ArrayList<>();
|
|
||||||
nodeTasks.stream().filter(v -> v.getNodeCode() == 80).flatMap(v -> v.getTasks().stream())
|
|
||||||
.filter(v1 -> ObjectUtil.isNotEmpty(v1.getCreateVariable()) && !v1.getCreateVariable().getBool("isMaster"))
|
|
||||||
.collect(Collectors.groupingBy(v1 -> v1.getCreateVariable().getStr("underTakeId")))
|
|
||||||
.forEach((k, v1) -> {
|
|
||||||
v1.stream().max(Comparator.comparing(BpmProcessTask::getEndOn)).ifPresent(v2 -> {
|
|
||||||
HashMap<String, Object> slaveUnderTakeReply = new HashMap<>();
|
|
||||||
slaveUnderTakeReply.put("name", v2.getCreateVariable().getStr("underTakeName"));
|
|
||||||
slaveUnderTakeReply.put("date", DateUtil.format(v2.getEndOn(), "yyyy年MM月dd日"));
|
|
||||||
slaveUnderTakeReply.put("user", v2.getActualOwnerUserName());
|
|
||||||
if (ObjectUtil.isNotEmpty(v2.getExtVariable())) {
|
|
||||||
slaveUnderTakeReply.put("opinion",HtmlUtil.cleanHtmlTag(StrUtil.blankToDefault(v2.getExtVariable().getStr("approvalOpinion"), "")));
|
|
||||||
slaveUnderTakeReply.put("implementState", v2.getExtVariable().getStr("implementState"));
|
|
||||||
slaveUnderTakeReply.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v2.getExtVariable().getStr("approvalSignature")));
|
|
||||||
}
|
|
||||||
slaveUnderTakeReplyList.add(slaveUnderTakeReply);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
docData.put("xbdf", slaveUnderTakeReplyList);
|
|
||||||
|
|
||||||
//主办校领导审批
|
|
||||||
nodeTasks.stream().filter(v -> v.getNodeCode() == 90)
|
|
||||||
.flatMap(v -> v.getTasks().stream())
|
|
||||||
.filter(v1 -> ObjectUtil.isNotEmpty(v1.getCreateVariable()) && v1.getCreateVariable().getBool("isMaster"))
|
|
||||||
.max(Comparator.comparing(BpmProcessTaskVo::getEndOn))
|
|
||||||
.ifPresent(v -> {
|
|
||||||
HashMap<String, Object> masterLeaderApproval = new HashMap<>();
|
|
||||||
masterLeaderApproval.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日"));
|
|
||||||
masterLeaderApproval.put("user", v.getActualOwnerUserName());
|
|
||||||
if (ObjectUtil.isNotEmpty(v.getExtVariable())) {
|
|
||||||
masterLeaderApproval.put("opinion", v.getExtVariable().getStr("approvalOpinion"));
|
|
||||||
masterLeaderApproval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v.getExtVariable().getStr("approvalSignature")));
|
|
||||||
}
|
|
||||||
docData.put("zbldsp", masterLeaderApproval);
|
|
||||||
});
|
|
||||||
|
|
||||||
List<HashMap<String, Object>> slaveLeaderApprovalList = new ArrayList<>();
|
|
||||||
|
|
||||||
//协办校领导审批
|
|
||||||
nodeTasks.stream().filter(v -> v.getNodeCode() == 90).flatMap(v -> v.getTasks().stream())
|
|
||||||
.filter(v1 -> ObjectUtil.isNotEmpty(v1.getCreateVariable()) && !v1.getCreateVariable().getBool("isMaster"))
|
|
||||||
.collect(Collectors.groupingBy(v1 -> v1.getCreateVariable().getStr("underTakeId")))
|
|
||||||
.forEach((k, v1) -> {
|
|
||||||
v1.stream().max(Comparator.comparing(BpmProcessTask::getEndOn)).ifPresent(v2 -> {
|
|
||||||
HashMap<String, Object> slaveLeaderApproval = new HashMap<>();
|
|
||||||
slaveLeaderApproval.put("name", v2.getCreateVariable().getStr("underTakeName"));
|
|
||||||
slaveLeaderApproval.put("date", DateUtil.format(v2.getEndOn(), "yyyy年MM月dd日"));
|
|
||||||
slaveLeaderApproval.put("user", v2.getActualOwnerUserName());
|
|
||||||
if (ObjectUtil.isNotEmpty(v2.getExtVariable())) {
|
|
||||||
slaveLeaderApproval.put("opinion", v2.getExtVariable().getStr("approvalOpinion"));
|
|
||||||
slaveLeaderApproval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v2.getExtVariable().getStr("approvalSignature")));
|
|
||||||
}
|
|
||||||
slaveLeaderApprovalList.add(slaveLeaderApproval);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
docData.put("xbldsp", slaveLeaderApprovalList);
|
|
||||||
|
|
||||||
//反馈评分
|
|
||||||
nodeTasks.stream().filter(v -> v.getNodeCode() == 100)
|
|
||||||
.flatMap(v -> v.getTasks().stream())
|
|
||||||
.max(Comparator.comparing(BpmProcessTaskVo::getEndOn))
|
|
||||||
.ifPresent(v -> {
|
|
||||||
HashMap<String, Object> feedbackScore = new HashMap<>();
|
|
||||||
feedbackScore.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日"));
|
|
||||||
feedbackScore.put("user", v.getActualOwnerUserName());
|
|
||||||
if (ObjectUtil.isNotEmpty(v.getExtVariable())) {
|
|
||||||
feedbackScore.put("opinion", v.getExtVariable().getStr("approvalOpinion"));
|
|
||||||
String feedBackScore = v.getExtVariable().getStr("feedBackScore", "");
|
|
||||||
feedbackScore.put("manyi", feedBackScore.equals("满意") ? "√" : "");
|
|
||||||
feedbackScore.put("jibenmanyi", feedBackScore.equals("基本满意") ? "√" : "");
|
|
||||||
feedbackScore.put("bumanyi", feedBackScore.equals("不满意") ? "√" : "");
|
|
||||||
}
|
|
||||||
docData.put("fk", feedbackScore);
|
|
||||||
});
|
|
||||||
|
|
||||||
AttachmentRenderData attachmentRenderData = Attachments.ofLocal("C:\\Users\\zxy\\Desktop\\1.七届二次教代会提案反馈表(xxx部门).docx").create();
|
|
||||||
docData.put("attachment", attachmentRenderData);
|
|
||||||
|
|
||||||
LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
|
LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
|
||||||
HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();
|
HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();
|
||||||
htmlRenderPolicy.getConfig().setShowDefaultTableBorderInTableCell(true);
|
htmlRenderPolicy.getConfig().setShowDefaultTableBorderInTableCell(true);
|
||||||
@@ -517,6 +342,80 @@ public class ProposalCommonServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void exportCollectAsDocx(String id, ByteArrayOutputStream byteArrayOutputStream) {
|
||||||
|
if (id == null || id.isEmpty()) {
|
||||||
|
throw new BaseException("提案信息不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
//基本信息
|
||||||
|
Sql sql = Sqls.create("""
|
||||||
|
SELECT
|
||||||
|
info.name,
|
||||||
|
info.code,
|
||||||
|
info.researchFindings,
|
||||||
|
info.brief,
|
||||||
|
info.measures,
|
||||||
|
info.createUserName,
|
||||||
|
tcde.unitName,
|
||||||
|
tcde.mobile,
|
||||||
|
type.name AS typeName,
|
||||||
|
tcs.j,
|
||||||
|
tcs.c,
|
||||||
|
tcs.fullName AS sessionName,
|
||||||
|
tcd.`name` AS delegationName
|
||||||
|
FROM
|
||||||
|
proposal_info info
|
||||||
|
LEFT JOIN proposal_type type on type.id = info.typeId
|
||||||
|
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
|
||||||
|
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
||||||
|
LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
|
||||||
|
WHERE info.id = @id
|
||||||
|
""").setParam("id", id);
|
||||||
|
sql.setCallback(Sqls.callback.map());
|
||||||
|
execute(sql);
|
||||||
|
NutMap info = (NutMap) sql.getResult();
|
||||||
|
HashMap<String, Object> docData = new HashMap<>(info);
|
||||||
|
|
||||||
|
//处理下富文本
|
||||||
|
String brief = info.getString("brief");
|
||||||
|
String measures = info.getString("measures");
|
||||||
|
info.put("brief", sysOfficeTemplateUtil.convertRichTextToDocText(brief));
|
||||||
|
info.put("measures", sysOfficeTemplateUtil.convertRichTextToDocText(measures));
|
||||||
|
|
||||||
|
// 高校
|
||||||
|
info.put("schoolName", Globals.AppName);
|
||||||
|
|
||||||
|
// 附议人信息
|
||||||
|
ProcessInstance instance = dao().fetch(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "=", id));
|
||||||
|
|
||||||
|
// 查询附议人信息
|
||||||
|
ProcessTask inviteTask = dao().fetch(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "=", instance.getId())
|
||||||
|
.and(ProcessTask::getTaskName, "=", "85b7b9bd-d706-48cb-99a1-ef1370fb1819")
|
||||||
|
.and(ProcessTask::getTaskState, "in", List.of(ProcessTaskStateEnum.DOING.getCode(), ProcessTaskStateEnum.FINISHED.getCode()))
|
||||||
|
.desc(ProcessTask::getCreatedAt));
|
||||||
|
NutMap variable = Json.fromJson(NutMap.class, inviteTask.getVariable());
|
||||||
|
List<NutMap> seconders = variable.getAsList(FlowConst.TASK_FORM_DATA_PREFIX + "seconder", NutMap.class);
|
||||||
|
docData.put("seconders", seconders);
|
||||||
|
|
||||||
|
LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
|
||||||
|
HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();
|
||||||
|
htmlRenderPolicy.getConfig().setShowDefaultTableBorderInTableCell(true);
|
||||||
|
|
||||||
|
Configure config = Configure.builder()
|
||||||
|
.bind("seconders", policy)
|
||||||
|
.bind("brief", htmlRenderPolicy)
|
||||||
|
.bind("measures", htmlRenderPolicy)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
try {
|
||||||
|
XWPFTemplate.compile(sysOfficeTemplateUtil.getTemplate("proposal"), config).render(docData).writeAndClose(byteArrayOutputStream);
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error("提案导出失败{},提案id:{}", e.getMessage(), id);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getDelegationHeadByProposalId(String proposalId) {
|
public String getDelegationHeadByProposalId(String proposalId) {
|
||||||
ProposalInfo proposalInfo = dao().fetch(ProposalInfo.class, proposalId);
|
ProposalInfo proposalInfo = dao().fetch(ProposalInfo.class, proposalId);
|
||||||
|
|||||||
+199
-24
@@ -8,40 +8,52 @@ import cn.hutool.core.util.StrUtil;
|
|||||||
import cn.hutool.http.HtmlUtil;
|
import cn.hutool.http.HtmlUtil;
|
||||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||||
import com.budwk.app.base.utils.CommonDownloadUtil;
|
import com.budwk.app.base.utils.CommonDownloadUtil;
|
||||||
|
import com.budwk.app.base.utils.SysOfficeTemplateUtil;
|
||||||
|
import com.budwk.app.flow.constant.FlowConst;
|
||||||
|
import com.budwk.app.flow.entity.ProcessInstance;
|
||||||
|
import com.budwk.app.flow.entity.ProcessTask;
|
||||||
|
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
||||||
|
import com.budwk.app.web.commons.base.Globals;
|
||||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalQueryComprehensiveParam;
|
import com.budwk.app.zhgh.democratic.proposal.param.ProposalQueryComprehensiveParam;
|
||||||
import com.budwk.app.zhgh.democratic.proposal.service.ProposalExportService;
|
import com.budwk.app.zhgh.democratic.proposal.service.ProposalExportService;
|
||||||
import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService;
|
import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService;
|
||||||
import com.budwk.app.zhgh.democratic.teachercongress.prepare.models.Teacher_congress_session;
|
import com.budwk.app.zhgh.democratic.teachercongress.prepare.models.Teacher_congress_session;
|
||||||
|
import com.deepoove.poi.XWPFTemplate;
|
||||||
|
import com.deepoove.poi.config.Configure;
|
||||||
|
import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.poi.ss.usermodel.Workbook;
|
import org.apache.poi.ss.usermodel.Workbook;
|
||||||
|
import org.ddr.poi.html.HtmlRenderPolicy;
|
||||||
import org.nutz.dao.Cnd;
|
import org.nutz.dao.Cnd;
|
||||||
import org.nutz.dao.Dao;
|
import org.nutz.dao.Dao;
|
||||||
import org.nutz.dao.Sqls;
|
import org.nutz.dao.Sqls;
|
||||||
import org.nutz.dao.sql.Sql;
|
import org.nutz.dao.sql.Sql;
|
||||||
import org.nutz.ioc.loader.annotation.Inject;
|
import org.nutz.ioc.loader.annotation.Inject;
|
||||||
import org.nutz.ioc.loader.annotation.IocBean;
|
import org.nutz.ioc.loader.annotation.IocBean;
|
||||||
|
import org.nutz.json.Json;
|
||||||
import org.nutz.lang.util.NutMap;
|
import org.nutz.lang.util.NutMap;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
/**
|
|
||||||
* @version 1.0
|
|
||||||
* @Author zzr
|
|
||||||
* @name:ProposalExportServiceImpl
|
|
||||||
* @Date 2024/10/10 10:28
|
|
||||||
* @注释
|
|
||||||
*/
|
|
||||||
@IocBean(args = {"refer:dao"})
|
@IocBean(args = {"refer:dao"})
|
||||||
|
@Slf4j
|
||||||
public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> implements ProposalExportService {
|
public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> implements ProposalExportService {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ProposalCommonService proposalCommonService;
|
private ProposalCommonService proposalCommonService;
|
||||||
|
@Inject
|
||||||
|
private SysOfficeTemplateUtil sysOfficeTemplateUtil;
|
||||||
|
|
||||||
|
|
||||||
public ProposalExportServiceImpl(Dao dao) {
|
public ProposalExportServiceImpl(Dao dao) {
|
||||||
super(dao);
|
super(dao);
|
||||||
@@ -139,37 +151,77 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void exportProposalSummaryAsExcel(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response) {
|
public void exportSummaryAsExcel(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response) {
|
||||||
// 自定义导出 excel
|
// 基本信息查询
|
||||||
Sql sql = exportComprehensiveSql(pageForm);
|
Sql sql = Sqls.create("""
|
||||||
|
SELECT
|
||||||
|
info.id,
|
||||||
|
info.name,
|
||||||
|
info.code,
|
||||||
|
info.researchFindings,
|
||||||
|
info.brief,
|
||||||
|
info.measures,
|
||||||
|
info.createUserName,
|
||||||
|
tcde.unitName,
|
||||||
|
tcde.mobile,
|
||||||
|
type.name AS typeName,
|
||||||
|
tcs.j,
|
||||||
|
tcs.c,
|
||||||
|
tcs.fullName AS sessionName,
|
||||||
|
tcd.`name` AS delegationName
|
||||||
|
FROM
|
||||||
|
proposal_info info
|
||||||
|
LEFT JOIN proposal_type type on type.id = info.typeId
|
||||||
|
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
|
||||||
|
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
||||||
|
LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
|
||||||
|
$condition
|
||||||
|
""");
|
||||||
Cnd cnd = Cnd.NEW();
|
Cnd cnd = Cnd.NEW();
|
||||||
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
|
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
|
||||||
cnd.groupBy("info.id");
|
cnd.groupBy("info.id");
|
||||||
sql.setCondition(cnd);
|
sql.setCondition(cnd);
|
||||||
// 导出的数据
|
// 导出的数据
|
||||||
List<NutMap> list = listMap(sql);
|
List<NutMap> list = listMap(sql);
|
||||||
for (NutMap row : list) {
|
// 添加序号,去除富文本,获取附议人
|
||||||
String content = HtmlUtil.cleanHtmlTag(StrUtil.blankToDefault(row.getString("masterUnderTakeReply"), ""));
|
for (int i = 0; i < list.size(); i++) {
|
||||||
row.put("masterUnderTakeReply", content);
|
list.get(i).put("index", i + 1);
|
||||||
|
list.get(i).put("brief",HtmlUtil.cleanHtmlTag(list.get(i).getString("brief")));
|
||||||
|
list.get(i).put("measures",HtmlUtil.cleanHtmlTag(list.get(i).getString("measures")));
|
||||||
|
|
||||||
|
// 流程实例
|
||||||
|
ProcessInstance instance = dao().fetch(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "=", list.get(i).getString("id")));
|
||||||
|
|
||||||
|
// 查询附议人信息
|
||||||
|
ProcessTask inviteTask = dao().fetch(ProcessTask.class,
|
||||||
|
Cnd.where(ProcessTask::getProcessInstanceId, "=", instance.getId())
|
||||||
|
.and(ProcessTask::getTaskName, "=", "85b7b9bd-d706-48cb-99a1-ef1370fb1819")
|
||||||
|
.and(ProcessTask::getTaskState, "in",
|
||||||
|
List.of(ProcessTaskStateEnum.DOING.getCode(), ProcessTaskStateEnum.FINISHED.getCode()))
|
||||||
|
.desc(ProcessTask::getCreatedAt));
|
||||||
|
|
||||||
|
if (inviteTask != null) {
|
||||||
|
NutMap variable = Json.fromJson(NutMap.class, inviteTask.getVariable());
|
||||||
|
List<NutMap> seconders = variable.getAsList(FlowConst.TASK_FORM_DATA_PREFIX + "seconder", NutMap.class);
|
||||||
|
list.get(i).put("secondedUserNames", seconders.stream().map(v->v.getString("userName")).collect(Collectors.joining(",")));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
List<ExcelExportEntity> exportEntities = new ArrayList<>();
|
List<ExcelExportEntity> exportEntities = new ArrayList<>();
|
||||||
|
exportEntities.add(new ExcelExportEntity("序号", "index", 10));
|
||||||
exportEntities.add(new ExcelExportEntity("提案编号", "code", 20));
|
exportEntities.add(new ExcelExportEntity("提案编号", "code", 20));
|
||||||
exportEntities.add(new ExcelExportEntity("提案名称", "name", 20));
|
exportEntities.add(new ExcelExportEntity("提案名称", "name", 20));
|
||||||
exportEntities.add(new ExcelExportEntity("提案类别", "typeName", 20));
|
exportEntities.add(new ExcelExportEntity("提案案由", "brief", 40));
|
||||||
exportEntities.add(new ExcelExportEntity("提案摘要", "excerpt", 100));
|
exportEntities.add(new ExcelExportEntity("代表调研情况", "researchFindings", 40));
|
||||||
exportEntities.add(new ExcelExportEntity("单位", "unitName", 20));
|
exportEntities.add(new ExcelExportEntity("代表建议措施", "measures", 40));
|
||||||
exportEntities.add(new ExcelExportEntity("提案人", "createUserName", 20));
|
exportEntities.add(new ExcelExportEntity("提案人", "createUserName", 20));
|
||||||
exportEntities.add(new ExcelExportEntity("附议人", "secondedUserNames", 40));
|
exportEntities.add(new ExcelExportEntity("提案人电话", "mobile", 20));
|
||||||
exportEntities.add(new ExcelExportEntity("立案结果", "caseFilingResultName", 20));
|
exportEntities.add(new ExcelExportEntity("附议人(两名)", "secondedUserNames", 20));
|
||||||
exportEntities.add(new ExcelExportEntity("主办单位", "masterUnderTakeName", 20));
|
exportEntities.add(new ExcelExportEntity("提案单位", "unitName", 20));
|
||||||
exportEntities.add(new ExcelExportEntity("协办单位", "slaveUnderTakeNamesStr", 30));
|
exportEntities.add(new ExcelExportEntity("拟交办单位", "", 20));
|
||||||
exportEntities.add(new ExcelExportEntity("承办单位答复", "masterUnderTakeReply", 30));
|
|
||||||
exportEntities.add(new ExcelExportEntity("备注", "remark", 30));
|
|
||||||
exportEntities.add(new ExcelExportEntity("提案状态", "processInstanceNodeName", 20));
|
|
||||||
|
|
||||||
Teacher_congress_session session = dao().fetch(Teacher_congress_session.class, pageForm.getSessionId());
|
Teacher_congress_session session = dao().fetch(Teacher_congress_session.class, pageForm.getSessionId());
|
||||||
String title = StrUtil.format("第{}届教职工代表大会第{}次会议提案汇总表", session.getJ(), session.getC());
|
String title = StrUtil.format("{}第{}{}教代会提案征集汇总表", Globals.AppName, session.getJ(), session.getC());
|
||||||
|
|
||||||
ExportParams exportParams = new ExportParams();
|
ExportParams exportParams = new ExportParams();
|
||||||
exportParams.setType(ExcelType.XSSF);
|
exportParams.setType(ExcelType.XSSF);
|
||||||
@@ -324,6 +376,129 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void exportCollectDocx(String id, ByteArrayOutputStream byteArrayOutputStream) {
|
||||||
|
// 基本信息查询
|
||||||
|
Sql sql = Sqls.create("""
|
||||||
|
SELECT
|
||||||
|
info.name,
|
||||||
|
info.code,
|
||||||
|
info.researchFindings,
|
||||||
|
info.brief,
|
||||||
|
info.measures,
|
||||||
|
info.createUserName,
|
||||||
|
tcde.unitName,
|
||||||
|
tcde.mobile,
|
||||||
|
type.name AS typeName,
|
||||||
|
tcs.j,
|
||||||
|
tcs.c,
|
||||||
|
tcs.fullName AS sessionName,
|
||||||
|
tcd.`name` AS delegationName
|
||||||
|
FROM
|
||||||
|
proposal_info info
|
||||||
|
LEFT JOIN proposal_type type on type.id = info.typeId
|
||||||
|
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
|
||||||
|
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
||||||
|
LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
|
||||||
|
WHERE info.id = @id
|
||||||
|
""").setParam("id", id);
|
||||||
|
sql.setCallback(Sqls.callback.map());
|
||||||
|
execute(sql);
|
||||||
|
|
||||||
|
NutMap info = (NutMap) sql.getResult();
|
||||||
|
// 处理富文本内容
|
||||||
|
info.put("brief", sysOfficeTemplateUtil.convertRichTextToDocText(info.getString("brief")));
|
||||||
|
info.put("measures", sysOfficeTemplateUtil.convertRichTextToDocText(info.getString("measures")));
|
||||||
|
|
||||||
|
// 添加高校信息
|
||||||
|
info.put("schoolName", Globals.AppName);
|
||||||
|
|
||||||
|
// 创建docData,直接复用info中的数据
|
||||||
|
HashMap<String, Object> docData = new HashMap<>(info);
|
||||||
|
|
||||||
|
// 流程实例
|
||||||
|
ProcessInstance instance = dao().fetch(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "=", id));
|
||||||
|
|
||||||
|
if (instance != null) {
|
||||||
|
// 查询附议人信息
|
||||||
|
ProcessTask inviteTask = dao().fetch(ProcessTask.class,
|
||||||
|
Cnd.where(ProcessTask::getProcessInstanceId, "=", instance.getId())
|
||||||
|
.and(ProcessTask::getTaskName, "=", "85b7b9bd-d706-48cb-99a1-ef1370fb1819")
|
||||||
|
.and(ProcessTask::getTaskState, "in",
|
||||||
|
List.of(ProcessTaskStateEnum.DOING.getCode(), ProcessTaskStateEnum.FINISHED.getCode()))
|
||||||
|
.desc(ProcessTask::getCreatedAt));
|
||||||
|
|
||||||
|
if (inviteTask != null) {
|
||||||
|
NutMap variable = Json.fromJson(NutMap.class, inviteTask.getVariable());
|
||||||
|
if (variable != null) {
|
||||||
|
List<NutMap> seconders = variable.getAsList(FlowConst.TASK_FORM_DATA_PREFIX + "seconder", NutMap.class);
|
||||||
|
docData.put("seconders", seconders != null ? seconders : Collections.emptyList());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 配置渲染策略
|
||||||
|
LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
|
||||||
|
HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();
|
||||||
|
htmlRenderPolicy.getConfig().setShowDefaultTableBorderInTableCell(true);
|
||||||
|
|
||||||
|
Configure config = Configure.builder()
|
||||||
|
.bind("seconders", policy)
|
||||||
|
.bind("brief", htmlRenderPolicy)
|
||||||
|
.bind("measures", htmlRenderPolicy)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
try {
|
||||||
|
XWPFTemplate.compile(sysOfficeTemplateUtil.getTemplate("proposal_collect"), config)
|
||||||
|
.render(docData)
|
||||||
|
.writeAndClose(byteArrayOutputStream);
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error("提案导出失败,提案id:{},错误信息:{}", id, e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void exportCollectZip(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response) {
|
||||||
|
Sql sql = Sqls.create("""
|
||||||
|
SELECT
|
||||||
|
info.id,
|
||||||
|
info.code,
|
||||||
|
info.name
|
||||||
|
FROM
|
||||||
|
proposal_info info
|
||||||
|
LEFT JOIN proposal_type type on type.id = info.typeId
|
||||||
|
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
|
||||||
|
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
||||||
|
LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
|
||||||
|
$condition
|
||||||
|
""");
|
||||||
|
Cnd cnd = Cnd.NEW();
|
||||||
|
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
|
||||||
|
sql.setCondition(cnd);
|
||||||
|
List<NutMap> list = listMap(sql);
|
||||||
|
|
||||||
|
try {
|
||||||
|
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||||
|
ZipOutputStream zipOutputStream = new ZipOutputStream(bos);
|
||||||
|
for (NutMap proposalRow : list) {
|
||||||
|
try (ByteArrayOutputStream docxByteArrayOutputStream = new ByteArrayOutputStream()) {
|
||||||
|
exportCollectDocx(proposalRow.getString("id"), docxByteArrayOutputStream);
|
||||||
|
ZipEntry zipEntry = new ZipEntry("征集表-" + proposalRow.getString("code") + "-" + proposalRow.getString("name") + ".docx");
|
||||||
|
zipOutputStream.putNextEntry(zipEntry);
|
||||||
|
docxByteArrayOutputStream.writeTo(zipOutputStream);
|
||||||
|
zipOutputStream.closeEntry();
|
||||||
|
} catch (IOException e) {
|
||||||
|
// 处理单个文件生成失败的情况
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
zipOutputStream.close();
|
||||||
|
CommonDownloadUtil.download("提案征集表压缩包.zip", bos.toByteArray(), response);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -3,7 +3,6 @@ package com.budwk.app.zhgh.democratic.suggestion.param;
|
|||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.budwk.app.base.param.PageForm;
|
import com.budwk.app.base.param.PageForm;
|
||||||
import com.budwk.app.base.utils.PageUtil;
|
import com.budwk.app.base.utils.PageUtil;
|
||||||
import com.budwk.app.zhgh.democratic.suggestion.models.SuggestionInfo;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import org.nutz.dao.Cnd;
|
import org.nutz.dao.Cnd;
|
||||||
@@ -13,7 +12,7 @@ import org.nutz.dao.Cnd;
|
|||||||
*/
|
*/
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
public class SuggestionSearchParam extends PageForm<SuggestionInfo> {
|
public class SuggestionSearchParam extends PageForm {
|
||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
private String code;
|
private String code;
|
||||||
|
|||||||
+46
-2
@@ -10,6 +10,7 @@ import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
|||||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||||
import com.budwk.app.zhgh.democratic.suggestionBox.service.SuggestionBoxService;
|
import com.budwk.app.zhgh.democratic.suggestionBox.service.SuggestionBoxService;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
import org.nutz.dao.Cnd;
|
import org.nutz.dao.Cnd;
|
||||||
import org.nutz.dao.Sqls;
|
import org.nutz.dao.Sqls;
|
||||||
import org.nutz.dao.sql.Sql;
|
import org.nutz.dao.sql.Sql;
|
||||||
@@ -18,7 +19,9 @@ import org.nutz.ioc.loader.annotation.IocBean;
|
|||||||
import org.nutz.lang.util.NutMap;
|
import org.nutz.lang.util.NutMap;
|
||||||
import org.nutz.mvc.annotation.At;
|
import org.nutz.mvc.annotation.At;
|
||||||
import org.nutz.mvc.annotation.Ok;
|
import org.nutz.mvc.annotation.Ok;
|
||||||
|
import org.nutz.mvc.annotation.Param;
|
||||||
|
|
||||||
|
import javax.validation.Valid;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@IocBean
|
@IocBean
|
||||||
@@ -39,7 +42,7 @@ public class SuggestionXghController {
|
|||||||
|
|
||||||
@At
|
@At
|
||||||
@SaCheckLogin
|
@SaCheckLogin
|
||||||
public Result pageData(PageForm pageForm, String title, Integer year, boolean approval) {
|
public Result pageData(PageForm pageForm, String taskId, String title, Integer year, boolean approval) {
|
||||||
Sql sql = Sqls.create("""
|
Sql sql = Sqls.create("""
|
||||||
SELECT
|
SELECT
|
||||||
info.id,
|
info.id,
|
||||||
@@ -99,5 +102,46 @@ public class SuggestionXghController {
|
|||||||
return Result.success(pageVO);
|
return Result.success(pageVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@SaCheckLogin
|
||||||
|
@ApiOperation("查询任务")
|
||||||
|
public Result queryTask(@Valid @Param("taskId") String taskId) {
|
||||||
|
Sql sql = Sqls.create("""
|
||||||
|
SELECT
|
||||||
|
info.id,
|
||||||
|
info.title,
|
||||||
|
info.userName,
|
||||||
|
info.loginName,
|
||||||
|
info.unitName,
|
||||||
|
info.unionName,
|
||||||
|
info.submitTime,
|
||||||
|
ins.id AS instanceId,
|
||||||
|
ins.businessNo,
|
||||||
|
ins.state instanceState,
|
||||||
|
ins.variable instanceVariable,
|
||||||
|
ins.processDefineId instanceProcessDefineId,
|
||||||
|
t.id taskId,
|
||||||
|
t.taskName AS taskKey,
|
||||||
|
t.displayName taskName,
|
||||||
|
t.taskType,
|
||||||
|
t.performType taskPerformType,
|
||||||
|
t.taskState,
|
||||||
|
t.finishTime,
|
||||||
|
t.taskParentId,
|
||||||
|
t.variable taskVariable,
|
||||||
|
IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName,
|
||||||
|
IF(rt.id IS NOT NULL, 1, 0) AS canRevoke
|
||||||
|
FROM
|
||||||
|
wf_process_task t
|
||||||
|
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
|
||||||
|
LEFT JOIN suggestion_box info ON info.id = ins.businessNo
|
||||||
|
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
|
||||||
|
LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10
|
||||||
|
LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10
|
||||||
|
WHERE t.id = @taskId
|
||||||
|
""");
|
||||||
|
sql.setParam("taskId", taskId);
|
||||||
|
NutMap data = suggestionBoxService.fetchMap(sql);
|
||||||
|
return Result.success(data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -5,7 +5,6 @@ import com.budwk.app.base.constant.RoleConstant;
|
|||||||
import com.budwk.app.base.param.PageForm;
|
import com.budwk.app.base.param.PageForm;
|
||||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||||
import com.budwk.app.zhgh.staffbenefit.difficulthelp.models.DifficultHelpInfo;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import org.nutz.dao.Cnd;
|
import org.nutz.dao.Cnd;
|
||||||
@@ -23,7 +22,7 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
public class DifficultHelpPageParam extends PageForm<DifficultHelpInfo> {
|
public class DifficultHelpPageParam extends PageForm {
|
||||||
|
|
||||||
private String year;
|
private String year;
|
||||||
|
|
||||||
|
|||||||
+1
-2
@@ -2,7 +2,6 @@ package com.budwk.app.zhgh.staffmanage.member.param.pageform;
|
|||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.budwk.app.base.param.PageForm;
|
import com.budwk.app.base.param.PageForm;
|
||||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import org.nutz.dao.Cnd;
|
import org.nutz.dao.Cnd;
|
||||||
@@ -17,7 +16,7 @@ import org.nutz.dao.util.cri.SqlExpressionGroup;
|
|||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
public class MemberApplyPageForm extends PageForm<MemberApplyRecord> {
|
public class MemberApplyPageForm extends PageForm {
|
||||||
|
|
||||||
private String unionId;
|
private String unionId;
|
||||||
|
|
||||||
|
|||||||
+1
-2
@@ -2,7 +2,6 @@ package com.budwk.app.zhgh.staffmanage.member.param.pageform;
|
|||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.budwk.app.base.param.PageForm;
|
import com.budwk.app.base.param.PageForm;
|
||||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord;
|
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
@@ -18,7 +17,7 @@ import org.nutz.dao.util.cri.SqlExpressionGroup;
|
|||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
public class MemberChangePageForm extends PageForm<MemberChangeRecord> {
|
public class MemberChangePageForm extends PageForm {
|
||||||
|
|
||||||
// 工会id
|
// 工会id
|
||||||
@ApiModelProperty("工会id")
|
@ApiModelProperty("工会id")
|
||||||
|
|||||||
+1
-2
@@ -1,7 +1,6 @@
|
|||||||
package com.budwk.app.zhgh.staffmanage.sourcechange.param;
|
package com.budwk.app.zhgh.staffmanage.sourcechange.param;
|
||||||
|
|
||||||
import com.budwk.app.base.param.PageForm;
|
import com.budwk.app.base.param.PageForm;
|
||||||
import com.budwk.app.sys.models.Sys_user_history;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
@@ -16,7 +15,7 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
public class SourceChangePageForm extends PageForm<Sys_user_history> {
|
public class SourceChangePageForm extends PageForm {
|
||||||
|
|
||||||
private String unionId;
|
private String unionId;
|
||||||
|
|
||||||
|
|||||||
+1
-2
@@ -1,7 +1,6 @@
|
|||||||
package com.budwk.app.zhgh.staffmanage.specialstaff.param;
|
package com.budwk.app.zhgh.staffmanage.specialstaff.param;
|
||||||
|
|
||||||
import com.budwk.app.base.param.PageForm;
|
import com.budwk.app.base.param.PageForm;
|
||||||
import com.budwk.app.zhgh.staffmanage.specialstaff.model.SpecialStaff;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
@@ -14,7 +13,7 @@ import lombok.EqualsAndHashCode;
|
|||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
public class SpecialStaffPageForm extends PageForm<SpecialStaff> {
|
public class SpecialStaffPageForm extends PageForm {
|
||||||
|
|
||||||
private String unionId;
|
private String unionId;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
const flowMixins = {
|
||||||
|
created() {
|
||||||
|
this.$nextTick(async ()=>{
|
||||||
|
await httpVueLoader("/components/plugins/Guava.vue?v=" + new Date().getTime())()
|
||||||
|
this.checkFlowTask();
|
||||||
|
})
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
checkFlowTask() {
|
||||||
|
const taskId = GetQueryString("taskId")
|
||||||
|
if (!taskId) return
|
||||||
|
|
||||||
|
// 如果是开始任务,用户自己处理(编辑、删除、撤销等等)
|
||||||
|
const taskKey = GetQueryString("taskKey")
|
||||||
|
if (taskKey === 'startTask') return;
|
||||||
|
|
||||||
|
// 增加loading动画
|
||||||
|
const loading = this.$loading({
|
||||||
|
lock: true,
|
||||||
|
text: 'Loading',
|
||||||
|
spinner: 'el-icon-loading',
|
||||||
|
background: 'rgba(0, 0, 0, 0.7)'
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(this.$refs)
|
||||||
|
console.log(this.$refs.guava)
|
||||||
|
|
||||||
|
// this.oepnAudit({})
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// this.$axios.post(location.pathname + '/queryTask', {taskId}).then(res => {
|
||||||
|
// if (res.code === 0) {
|
||||||
|
// // 延迟1.5秒 显示loading动画 解决Guava异步加载 获取不到实例的问题
|
||||||
|
// setTimeout(() => {
|
||||||
|
// if (res.data.taskState === 10) {
|
||||||
|
// this.openAudit(res.data);
|
||||||
|
// } else {
|
||||||
|
// this.openView(res.data);
|
||||||
|
// }
|
||||||
|
// loading.close();
|
||||||
|
// }, 1500)
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -81,6 +81,7 @@
|
|||||||
<script src="${base!}/assets/platform/js/main.js"></script>
|
<script src="${base!}/assets/platform/js/main.js"></script>
|
||||||
<script src="${base!}/assets/platform/js/mixin/initTableMixins.js"></script>
|
<script src="${base!}/assets/platform/js/mixin/initTableMixins.js"></script>
|
||||||
<script src="${base!}/assets/platform/js/mixin/styleMixin.js"></script>
|
<script src="${base!}/assets/platform/js/mixin/styleMixin.js"></script>
|
||||||
|
<script src="${base!}/assets/platform/js/mixin/flowMixins.js"></script>
|
||||||
<script src="${base!}/assets/platform/js/tool/businessTool.js"></script>
|
<script src="${base!}/assets/platform/js/tool/businessTool.js"></script>
|
||||||
<script src="${base!}/assets/platform/js/util/autoShowError.js"></script>
|
<script src="${base!}/assets/platform/js/util/autoShowError.js"></script>
|
||||||
|
|
||||||
|
|||||||
@@ -254,7 +254,8 @@ layout("/layouts/v4/baseLayout.html"){
|
|||||||
<el-card shadow="never" class="filter-section">
|
<el-card shadow="never" class="filter-section">
|
||||||
<el-form :inline="true" :model="pageForm" class="search-form">
|
<el-form :inline="true" :model="pageForm" class="search-form">
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-input v-model="pageForm.searchKeyword" placeholder="请输入关键词搜索" prefix-icon="el-icon-search"
|
<el-input v-model="pageForm.searchKeyword" placeholder="请输入关键词搜索"
|
||||||
|
prefix-icon="el-icon-search"
|
||||||
clearable></el-input>
|
clearable></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
@@ -478,13 +479,13 @@ layout("/layouts/v4/baseLayout.html"){
|
|||||||
|
|
||||||
// 处理任务
|
// 处理任务
|
||||||
async openView(task) {
|
async openView(task) {
|
||||||
const {taskId, taskState, instanceId, businessNo} = task
|
console.log(task)
|
||||||
// if (taskState === this.taskStateEnum.DOING) {
|
const {taskId, taskKey, taskState, instanceId, businessNo, formKey} = task
|
||||||
// window.open("/flow/common/approval/form?instanceId=" + instanceId + "&taskId=" + taskId + "&businessId=" + businessNo)
|
if (!formKey) {
|
||||||
// } else {
|
this.$message.warning("当前流程没有配置地址")
|
||||||
// window.open("/flow/common/approval/form?instanceId=" + instanceId + "&businessId=" + businessNo)
|
return
|
||||||
// }
|
}
|
||||||
this.$message.error("功能开发中...")
|
window.open(formKey + "?taskId=" + taskId + "bizId=" + businessNo + "taskKey=" + taskKey)
|
||||||
},
|
},
|
||||||
|
|
||||||
// 获取空状态文本
|
// 获取空状态文本
|
||||||
|
|||||||
+70
-43
@@ -7,7 +7,14 @@ layout("/layouts/platform.html"){
|
|||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
<search @search="doSearch">
|
<search @search="doSearch">
|
||||||
<search-item label="年度">
|
<search-item label="年度">
|
||||||
<el-date-picker v-model="pageForm.year" type="year" value-format="yyyy" placeholder="年度" style="width: 100%"></el-date-picker>
|
<el-date-picker
|
||||||
|
:clearable="true"
|
||||||
|
v-model="pageForm.year"
|
||||||
|
type="year"
|
||||||
|
value-format="yyyy"
|
||||||
|
placeholder="年度"
|
||||||
|
style="width: 100%"
|
||||||
|
></el-date-picker>
|
||||||
</search-item>
|
</search-item>
|
||||||
<search-item label="标题">
|
<search-item label="标题">
|
||||||
<el-input v-model="pageForm.title" placeholder="标题" clearable></el-input>
|
<el-input v-model="pageForm.title" placeholder="标题" clearable></el-input>
|
||||||
@@ -28,22 +35,20 @@ layout("/layouts/platform.html"){
|
|||||||
<el-table-column prop="userName" label="投稿人姓名"></el-table-column>
|
<el-table-column prop="userName" label="投稿人姓名"></el-table-column>
|
||||||
<el-table-column prop="unitName" label="投稿人单位"></el-table-column>
|
<el-table-column prop="unitName" label="投稿人单位"></el-table-column>
|
||||||
<el-table-column prop="unionName" label="投稿人工会"></el-table-column>
|
<el-table-column prop="unionName" label="投稿人工会"></el-table-column>
|
||||||
<el-table-column prop="clubName" label="投稿人协会"></el-table-column>
|
|
||||||
<el-table-column prop="submitTime" label="投稿时间"></el-table-column>
|
<el-table-column prop="submitTime" label="投稿时间"></el-table-column>
|
||||||
<el-table-column label="当前节点" prop="processInstanceNodeName" show-overflow-tooltip></el-table-column>
|
<el-table-column prop="curTaskName" label="当前节点"></el-table-column>
|
||||||
<el-table-column label="操作" fixed="right">
|
<el-table-column prop="instanceState" label="流程状态">
|
||||||
<template slot-scope="{row}">
|
<template slot-scope="{row}">
|
||||||
<el-button @click="onOpen(row.id)" size="mini" type="primary">查看</el-button>
|
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
|
||||||
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'" @click="openApproval(row)" size="mini" type="primary">
|
size="small"></enum-tag>
|
||||||
审核
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" width="200px" fixed="right">
|
||||||
|
<template slot-scope="{row}">
|
||||||
|
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||||
|
<el-button v-if="row.taskState === 10" @click="openAudit(row)" size="mini" type="primary">审核
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button v-if="row.canRevoke" @click="onRevoke(row)" size="mini" type="danger">撤回
|
||||||
v-if="row.processInstanceTaskStatus==='COMPLETE' && !row.nextTaskIsComplete"
|
|
||||||
@click="openRevoke(row.processInstanceTaskId)"
|
|
||||||
size="mini"
|
|
||||||
type="danger"
|
|
||||||
>
|
|
||||||
撤回
|
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
@@ -51,21 +56,27 @@ layout("/layouts/platform.html"){
|
|||||||
<!--#include("/layouts/pagination.html"){}#-->
|
<!--#include("/layouts/pagination.html"){}#-->
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<template #public>
|
<template #edit>
|
||||||
<info ref="infoRef"></info>
|
<article-info ref="articleInfoRef">
|
||||||
<div v-if="showApprovalForm">
|
<div v-if="showApprovalForm">
|
||||||
<div class="process-title">{{formData.processInstanceNodeName}}</div>
|
<div class="process-title">
|
||||||
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">
|
{{formData.taskName}}
|
||||||
<el-form-item label="审核意见" prop="approvalOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
</div>
|
||||||
<user-opinion-textarea v-model="formData.approvalOpinion"></user-opinion-textarea>
|
<el-form :model="formData" ref="formRef" :rules="formRules" label-width="0" label-suffix=":"
|
||||||
|
class="flow-task-form">
|
||||||
|
<el-form-item label="审批意见" prop="tf_opinion"
|
||||||
|
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||||
|
<user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<el-row type="flex" justify="end">
|
<el-row type="flex" justify="end">
|
||||||
<el-button plain @click="$refs.guava.index()">取消</el-button>
|
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
|
||||||
<el-button type="danger" @click="doApproval('BACK')">退回修改</el-button>
|
<el-button @click="handleTaskAction(6)" size="small" type="info">退回到发起人</el-button>
|
||||||
<el-button type="primary" @click="doApproval('PASS')">同意</el-button>
|
<el-button @click="handleTaskAction(2)" size="small" type="danger">拒绝申请</el-button>
|
||||||
|
<el-button @click="handleTaskAction(1)" size="small" type="primary">同意申请</el-button>
|
||||||
</el-row>
|
</el-row>
|
||||||
</div>
|
</div>
|
||||||
|
</article-info>
|
||||||
</template>
|
</template>
|
||||||
</guava>
|
</guava>
|
||||||
</div>
|
</div>
|
||||||
@@ -77,53 +88,68 @@ layout("/layouts/platform.html"){
|
|||||||
el: "#app",
|
el: "#app",
|
||||||
store,
|
store,
|
||||||
mixins: [initTableMixins],
|
mixins: [initTableMixins],
|
||||||
components: { info },
|
components: {
|
||||||
|
"article-info": ARTICLE_INFO
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
pageForm: {
|
pageForm: {
|
||||||
approval: false
|
approval: false
|
||||||
},
|
},
|
||||||
showApprovalForm: false
|
showApprovalForm: false,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
onOpen(id) {
|
// 查看
|
||||||
this.$refs.guava.public(() => {
|
openView(row) {
|
||||||
this.$refs.infoRef.onOpen(id)
|
this.$refs.guava.edit(()=>{
|
||||||
|
this.showApprovalForm = false
|
||||||
|
this.$refs.articleInfoRef.onOpen(row)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
openApproval(row) {
|
|
||||||
this.$refs.guava.public(() => {
|
// 审核
|
||||||
this.$refs.infoRef.onOpen(row.id)
|
openAudit(row) {
|
||||||
this.formData = row.approvalParam
|
this.$refs.guava.edit(()=>{
|
||||||
this.showApprovalForm = true
|
this.showApprovalForm = true
|
||||||
|
this.formData = {
|
||||||
|
processTaskId: row.taskId,
|
||||||
|
taskName: row.curTaskName
|
||||||
|
}
|
||||||
|
this.$refs.articleInfoRef.onOpen(row)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
doApproval(approvalType) {
|
|
||||||
this.formData.bpmTaskApprovalType = approvalType
|
// 提交
|
||||||
this.$refs.approvalFormRef.validate((valid) => {
|
handleTaskAction(val) {
|
||||||
if (valid) {
|
this.$confirm("您确定要提交吗?", "提示", {
|
||||||
this.$axios
|
confirmButtonText: "确定",
|
||||||
.post("/platform/article/clubApproval/approval", {
|
cancelButtonText: "取消",
|
||||||
approval: JSON.stringify(this.formData)
|
type: "warning"
|
||||||
|
}).then(() => {
|
||||||
|
this.$axios.post("/flow/common/executeTask", {
|
||||||
|
data: JSON.stringify({
|
||||||
|
...this.formData,
|
||||||
|
submitType: val
|
||||||
})
|
})
|
||||||
.then((res) => {
|
}).then((res) => {
|
||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
this.$refs.guava.index()
|
this.$refs.guava.index()
|
||||||
this.$message.success(res.msg)
|
this.$message.success(res.msg)
|
||||||
this.doSearch()
|
this.doSearch()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
openRevoke(taskId) {
|
|
||||||
|
// 撤回
|
||||||
|
onRevoke(row) {
|
||||||
this.$confirm("您确定要撤回吗?", "提示", {
|
this.$confirm("您确定要撤回吗?", "提示", {
|
||||||
confirmButtonText: "确定",
|
confirmButtonText: "确定",
|
||||||
cancelButtonText: "取消",
|
cancelButtonText: "取消",
|
||||||
type: "info"
|
type: "info"
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
this.$axios.post("/platform/article/clubApproval/revoke", { taskId }).then((res) => {
|
this.$axios.post("/flow/common/revokeTask", {taskId: row.taskId}).then((res) => {
|
||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
this.$message.success(res.msg)
|
this.$message.success(res.msg)
|
||||||
this.doSearch()
|
this.doSearch()
|
||||||
@@ -131,6 +157,7 @@ layout("/layouts/platform.html"){
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
this.pageData()
|
this.pageData()
|
||||||
|
|||||||
+21
-12
@@ -112,12 +112,11 @@ layout("/layouts/platform.html"){
|
|||||||
</el-card>
|
</el-card>
|
||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
<table-tool>
|
<table-tool>
|
||||||
<el-button type="primary" size="small" @click="exportAllProposalAsZip">导出全部提案压缩包</el-button>
|
<el-button type="primary" size="small" @click="exportAllProposalAsZip">导出提案压缩包</el-button>
|
||||||
<el-button type="primary" size="small" @click="exportAllProposalFeedBackAsZip">
|
<el-button type="primary" size="small" @click="exportCollectZip">导出提案征集表压缩包</el-button>
|
||||||
导出全部提案反馈表压缩包
|
<!-- <el-button type="primary" size="small" @click="exportAllProposalFeedBackAsZip">导出反馈表压缩包</el-button>-->
|
||||||
</el-button>
|
<el-button type="primary" size="small" @click="exportSummaryAsExcel">导出汇总表</el-button>
|
||||||
<el-button type="primary" size="small" @click="exportProposalSummaryAsExcel">导出汇总表</el-button>
|
<!-- <el-button type="primary" size="small" @click="exportProposalRegisterSummaryAsExcel">导出立案汇总表-->
|
||||||
<el-button type="primary" size="small" @click="exportProposalRegisterSummaryAsExcel">导出立案汇总表
|
|
||||||
</el-button>
|
</el-button>
|
||||||
</table-tool>
|
</table-tool>
|
||||||
<el-table :data="tableData" @sort-change="pageOrder" header-align="center" style="width: 100%" row-key="id">
|
<el-table :data="tableData" @sort-change="pageOrder" header-align="center" style="width: 100%" row-key="id">
|
||||||
@@ -140,10 +139,15 @@ layout("/layouts/platform.html"){
|
|||||||
<el-tag size="mini" v-else type="danger">否</el-tag>
|
<el-tag size="mini" v-else type="danger">否</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="主办单位" prop="masterUnderTakeName" show-overflow-tooltip></el-table-column>
|
<el-table-column label="主办单位" prop="masterUnitName" show-overflow-tooltip></el-table-column>
|
||||||
<el-table-column label="协办单位" prop="slaveUnderTakeNames" show-overflow-tooltip></el-table-column>
|
<el-table-column label="协办单位" prop="slaveUnitNames" show-overflow-tooltip></el-table-column>
|
||||||
<el-table-column label="当前节点" prop="processInstanceNodeName"
|
<el-table-column prop="curTaskName" label="当前节点"></el-table-column>
|
||||||
show-overflow-tooltip></el-table-column>
|
<el-table-column prop="instanceState" label="流程状态">
|
||||||
|
<template slot-scope="{row}">
|
||||||
|
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
|
||||||
|
size="small"></enum-tag>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column label="操作" fixed="right" width="200px">
|
<el-table-column label="操作" fixed="right" width="200px">
|
||||||
<template scope="{row}">
|
<template scope="{row}">
|
||||||
<el-button size="mini" type="primary" @click="openView(row)">查看</el-button>
|
<el-button size="mini" type="primary" @click="openView(row)">查看</el-button>
|
||||||
@@ -199,6 +203,11 @@ layout("/layouts/platform.html"){
|
|||||||
pageForm: JSON.stringify(this.pageForm)
|
pageForm: JSON.stringify(this.pageForm)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
exportCollectZip() {
|
||||||
|
this.$downLoad(loc() + "/exportCollectZip", {
|
||||||
|
pageForm: JSON.stringify(this.pageForm)
|
||||||
|
})
|
||||||
|
},
|
||||||
exportAllProposalFeedBackAsZip() {
|
exportAllProposalFeedBackAsZip() {
|
||||||
this.$downLoad(loc() + "/exportAllProposalFeedBackAsZip", {
|
this.$downLoad(loc() + "/exportAllProposalFeedBackAsZip", {
|
||||||
pageForm: JSON.stringify(this.pageForm)
|
pageForm: JSON.stringify(this.pageForm)
|
||||||
@@ -207,8 +216,8 @@ layout("/layouts/platform.html"){
|
|||||||
exportDocx(id) {
|
exportDocx(id) {
|
||||||
this.$downLoad("/platform/proposal/common/exportProposalAsDocx", {id})
|
this.$downLoad("/platform/proposal/common/exportProposalAsDocx", {id})
|
||||||
},
|
},
|
||||||
exportProposalSummaryAsExcel() {
|
exportSummaryAsExcel() {
|
||||||
this.$downLoad("/platform/proposal/export/comprehensive/exportProposalSummaryAsExcel", {
|
this.$downLoad("/platform/proposal/export/comprehensive/exportSummaryAsExcel", {
|
||||||
pageForm: JSON.stringify(this.pageForm)
|
pageForm: JSON.stringify(this.pageForm)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|||||||
+8
-20
@@ -6,6 +6,13 @@ layout("/layouts/platform.html"){
|
|||||||
<guava ref="guava">
|
<guava ref="guava">
|
||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
<search @search="doSearch">
|
<search @search="doSearch">
|
||||||
|
<search-item label="教代会">
|
||||||
|
<el-select @change="meetingChange" clearable filterable placeholder="所属教代会"
|
||||||
|
v-model="pageForm.sessionId">
|
||||||
|
<el-option :key="item.id" :label="item.fullName" :value="item.id"
|
||||||
|
v-for="item in sessionOptions"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</search-item>
|
||||||
<search-item label="提案编号">
|
<search-item label="提案编号">
|
||||||
<el-input v-model="pageForm.code" placeholder="提案编号" @keyup.enter.native="doSearch" clearable
|
<el-input v-model="pageForm.code" placeholder="提案编号" @keyup.enter.native="doSearch" clearable
|
||||||
style="width: 100%"></el-input>
|
style="width: 100%"></el-input>
|
||||||
@@ -32,13 +39,6 @@ layout("/layouts/platform.html"){
|
|||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
></el-input>
|
></el-input>
|
||||||
</search-item>
|
</search-item>
|
||||||
<search-item label="教代会">
|
|
||||||
<el-select @change="meetingChange" clearable filterable placeholder="所属教代会"
|
|
||||||
v-model="pageForm.sessionId">
|
|
||||||
<el-option :key="item.id" :label="item.fullName" :value="item.id"
|
|
||||||
v-for="item in sessionOptions"></el-option>
|
|
||||||
</el-select>
|
|
||||||
</search-item>
|
|
||||||
</search>
|
</search>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
@@ -216,18 +216,7 @@ layout("/layouts/platform.html"){
|
|||||||
|
|
||||||
// 教代会
|
// 教代会
|
||||||
async meetingChange(val) {
|
async meetingChange(val) {
|
||||||
this.formData.delegationId = null
|
this.doSearch()
|
||||||
this.formData.committeeId = null
|
|
||||||
this.delegationOptions = await proposal.getDelegation(val)
|
|
||||||
this.committeeOptions = await this.getInstitutions(val)
|
|
||||||
},
|
|
||||||
// 代表团
|
|
||||||
listDelegation() {
|
|
||||||
this.$axios.post("/platform/proposal/common/listDelegation", {sessionId: this.pageForm.sessionId}).then((res) => {
|
|
||||||
if (res.code === 0) {
|
|
||||||
this.delegationOptions = res.data
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// 查询开启的教代会
|
// 查询开启的教代会
|
||||||
@@ -238,7 +227,6 @@ layout("/layouts/platform.html"){
|
|||||||
if (this.sessionOptions) {
|
if (this.sessionOptions) {
|
||||||
this.$set(this.pageForm, "sessionId", this.sessionOptions[0].id)
|
this.$set(this.pageForm, "sessionId", this.sessionOptions[0].id)
|
||||||
this.pageData()
|
this.pageData()
|
||||||
this.listDelegation()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
+5
-14
@@ -6,10 +6,6 @@ layout("/layouts/platform.html"){
|
|||||||
<guava ref="guava">
|
<guava ref="guava">
|
||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
<search @search="doSearch">
|
<search @search="doSearch">
|
||||||
<search-item label="提案名称">
|
|
||||||
<el-input v-model="pageForm.name" placeholder="提案名称" @keyup.enter.native="doSearch" clearable
|
|
||||||
style="width: 100%"></el-input>
|
|
||||||
</search-item>
|
|
||||||
<search-item label="教代会">
|
<search-item label="教代会">
|
||||||
<el-select @change="meetingChange" clearable filterable placeholder="所属教代会"
|
<el-select @change="meetingChange" clearable filterable placeholder="所属教代会"
|
||||||
v-model="pageForm.sessionId">
|
v-model="pageForm.sessionId">
|
||||||
@@ -17,6 +13,10 @@ layout("/layouts/platform.html"){
|
|||||||
v-for="item in sessionOptions"></el-option>
|
v-for="item in sessionOptions"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</search-item>
|
</search-item>
|
||||||
|
<search-item label="提案名称">
|
||||||
|
<el-input v-model="pageForm.name" placeholder="提案名称" @keyup.enter.native="doSearch" clearable
|
||||||
|
style="width: 100%"></el-input>
|
||||||
|
</search-item>
|
||||||
</search>
|
</search>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
@@ -158,16 +158,7 @@ layout("/layouts/platform.html"){
|
|||||||
async meetingChange(val) {
|
async meetingChange(val) {
|
||||||
this.formData.delegationId = null
|
this.formData.delegationId = null
|
||||||
this.formData.committeeId = null
|
this.formData.committeeId = null
|
||||||
this.listDelegation()
|
this.doSearch()
|
||||||
},
|
|
||||||
|
|
||||||
// 代表团
|
|
||||||
listDelegation() {
|
|
||||||
this.$axios.post("/platform/proposal/common/listDelegation", {sessionId: this.pageForm.sessionId}).then((res) => {
|
|
||||||
if (res.code === 0) {
|
|
||||||
this.delegationOptions = res.data
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// 查询开启的教代会
|
// 查询开启的教代会
|
||||||
|
|||||||
+8
-20
@@ -6,6 +6,13 @@ layout("/layouts/platform.html"){
|
|||||||
<guava ref="guava">
|
<guava ref="guava">
|
||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
<search @search="doSearch">
|
<search @search="doSearch">
|
||||||
|
<search-item label="教代会">
|
||||||
|
<el-select @change="meetingChange" clearable filterable placeholder="所属教代会"
|
||||||
|
v-model="pageForm.sessionId">
|
||||||
|
<el-option :key="item.id" :label="item.fullName" :value="item.id"
|
||||||
|
v-for="item in sessionOptions"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</search-item>
|
||||||
<search-item label="提案编号">
|
<search-item label="提案编号">
|
||||||
<el-input v-model="pageForm.code" placeholder="提案编号" @keyup.enter.native="doSearch" clearable
|
<el-input v-model="pageForm.code" placeholder="提案编号" @keyup.enter.native="doSearch" clearable
|
||||||
style="width: 100%"></el-input>
|
style="width: 100%"></el-input>
|
||||||
@@ -32,13 +39,6 @@ layout("/layouts/platform.html"){
|
|||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
></el-input>
|
></el-input>
|
||||||
</search-item>
|
</search-item>
|
||||||
<search-item label="教代会">
|
|
||||||
<el-select @change="meetingChange" clearable filterable placeholder="所属教代会"
|
|
||||||
v-model="pageForm.sessionId">
|
|
||||||
<el-option :key="item.id" :label="item.fullName" :value="item.id"
|
|
||||||
v-for="item in sessionOptions"></el-option>
|
|
||||||
</el-select>
|
|
||||||
</search-item>
|
|
||||||
</search>
|
</search>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
@@ -204,19 +204,7 @@ layout("/layouts/platform.html"){
|
|||||||
|
|
||||||
// 教代会
|
// 教代会
|
||||||
async meetingChange(val) {
|
async meetingChange(val) {
|
||||||
this.formData.delegationId = null
|
this.doSearch()
|
||||||
this.formData.committeeId = null
|
|
||||||
this.delegationOptions = await proposal.getDelegation(val)
|
|
||||||
this.committeeOptions = await this.getInstitutions(val)
|
|
||||||
},
|
|
||||||
|
|
||||||
// 代表团
|
|
||||||
listDelegation() {
|
|
||||||
this.$axios.post("/platform/proposal/common/listDelegation", {sessionId: this.pageForm.sessionId}).then((res) => {
|
|
||||||
if (res.code === 0) {
|
|
||||||
this.delegationOptions = res.data
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// 查询开启的教代会
|
// 查询开启的教代会
|
||||||
|
|||||||
@@ -8,14 +8,14 @@ layout("/layouts/platform.html"){
|
|||||||
<guava ref="guava">
|
<guava ref="guava">
|
||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
<search @search="doSearch">
|
<search @search="doSearch">
|
||||||
<search-item label="提案名称">
|
|
||||||
<el-input v-model="pageForm.name" placeholder="提案名称" @keyup.enter.native="doSearch" clearable style="width: 100%"></el-input>
|
|
||||||
</search-item>
|
|
||||||
<search-item label="教代会">
|
<search-item label="教代会">
|
||||||
<el-select @change="meetingChange" clearable filterable placeholder="所属教代会" v-model="pageForm.sessionId">
|
<el-select @change="meetingChange" clearable filterable placeholder="所属教代会" v-model="pageForm.sessionId">
|
||||||
<el-option :key="item.id" :label="item.fullName" :value="item.id" v-for="item in sessionOptions"></el-option>
|
<el-option :key="item.id" :label="item.fullName" :value="item.id" v-for="item in sessionOptions"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</search-item>
|
</search-item>
|
||||||
|
<search-item label="提案名称">
|
||||||
|
<el-input v-model="pageForm.name" placeholder="提案名称" @keyup.enter.native="doSearch" clearable style="width: 100%"></el-input>
|
||||||
|
</search-item>
|
||||||
</search>
|
</search>
|
||||||
</el-card>
|
</el-card>
|
||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
@@ -123,8 +123,7 @@ layout("/layouts/platform.html"){
|
|||||||
|
|
||||||
//教代会change
|
//教代会change
|
||||||
async meetingChange(val) {
|
async meetingChange(val) {
|
||||||
this.formData.delegationId = null
|
this.doSearch()
|
||||||
this.formData.committeeId = null
|
|
||||||
//this.delegationOptions = await proposal.getDelegation(val)
|
//this.delegationOptions = await proposal.getDelegation(val)
|
||||||
//this.committeeOptions = await this.getInstitutions(val)
|
//this.committeeOptions = await this.getInstitutions(val)
|
||||||
},
|
},
|
||||||
|
|||||||
+8
-20
@@ -6,6 +6,13 @@ layout("/layouts/platform.html"){
|
|||||||
<guava ref="guava">
|
<guava ref="guava">
|
||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
<search @search="doSearch">
|
<search @search="doSearch">
|
||||||
|
<search-item label="教代会">
|
||||||
|
<el-select @change="meetingChange" clearable filterable placeholder="所属教代会"
|
||||||
|
v-model="pageForm.sessionId">
|
||||||
|
<el-option :key="item.id" :label="item.fullName" :value="item.id"
|
||||||
|
v-for="item in sessionOptions"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</search-item>
|
||||||
<search-item label="提案编号">
|
<search-item label="提案编号">
|
||||||
<el-input v-model="pageForm.code" placeholder="提案编号" @keyup.enter.native="doSearch" clearable
|
<el-input v-model="pageForm.code" placeholder="提案编号" @keyup.enter.native="doSearch" clearable
|
||||||
style="width: 100%"></el-input>
|
style="width: 100%"></el-input>
|
||||||
@@ -32,13 +39,6 @@ layout("/layouts/platform.html"){
|
|||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
></el-input>
|
></el-input>
|
||||||
</search-item>
|
</search-item>
|
||||||
<search-item label="教代会">
|
|
||||||
<el-select @change="meetingChange" clearable filterable placeholder="所属教代会"
|
|
||||||
v-model="pageForm.sessionId">
|
|
||||||
<el-option :key="item.id" :label="item.fullName" :value="item.id"
|
|
||||||
v-for="item in sessionOptions"></el-option>
|
|
||||||
</el-select>
|
|
||||||
</search-item>
|
|
||||||
</search>
|
</search>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
@@ -187,19 +187,7 @@ layout("/layouts/platform.html"){
|
|||||||
|
|
||||||
// 教代会
|
// 教代会
|
||||||
async meetingChange(val) {
|
async meetingChange(val) {
|
||||||
this.formData.delegationId = null
|
this.doSearch()
|
||||||
this.formData.committeeId = null
|
|
||||||
this.delegationOptions = await proposal.getDelegation(val)
|
|
||||||
this.committeeOptions = await this.getInstitutions(val)
|
|
||||||
},
|
|
||||||
|
|
||||||
// 代表团
|
|
||||||
listDelegation() {
|
|
||||||
this.$axios.post("/platform/proposal/common/listDelegation", {sessionId: this.pageForm.sessionId}).then((res) => {
|
|
||||||
if (res.code === 0) {
|
|
||||||
this.delegationOptions = res.data
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// 查询开启的教代会
|
// 查询开启的教代会
|
||||||
|
|||||||
+5
-14
@@ -6,10 +6,6 @@ layout("/layouts/platform.html"){
|
|||||||
<guava ref="guava">
|
<guava ref="guava">
|
||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
<search @search="doSearch">
|
<search @search="doSearch">
|
||||||
<search-item label="提案名称">
|
|
||||||
<el-input v-model="pageForm.name" placeholder="提案名称" @keyup.enter.native="doSearch" clearable
|
|
||||||
style="width: 100%"></el-input>
|
|
||||||
</search-item>
|
|
||||||
<search-item label="教代会">
|
<search-item label="教代会">
|
||||||
<el-select @change="meetingChange" clearable filterable placeholder="所属教代会"
|
<el-select @change="meetingChange" clearable filterable placeholder="所属教代会"
|
||||||
v-model="pageForm.sessionId">
|
v-model="pageForm.sessionId">
|
||||||
@@ -17,6 +13,10 @@ layout("/layouts/platform.html"){
|
|||||||
v-for="item in sessionOptions"></el-option>
|
v-for="item in sessionOptions"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</search-item>
|
</search-item>
|
||||||
|
<search-item label="提案名称">
|
||||||
|
<el-input v-model="pageForm.name" placeholder="提案名称" @keyup.enter.native="doSearch" clearable
|
||||||
|
style="width: 100%"></el-input>
|
||||||
|
</search-item>
|
||||||
</search>
|
</search>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
@@ -160,16 +160,7 @@ layout("/layouts/platform.html"){
|
|||||||
async meetingChange(val) {
|
async meetingChange(val) {
|
||||||
this.formData.delegationId = null
|
this.formData.delegationId = null
|
||||||
this.formData.committeeId = null
|
this.formData.committeeId = null
|
||||||
this.listDelegation()
|
this.doSearch()
|
||||||
},
|
|
||||||
|
|
||||||
// 代表团
|
|
||||||
listDelegation() {
|
|
||||||
this.$axios.post("/platform/proposal/common/listDelegation", {sessionId: this.pageForm.sessionId}).then((res) => {
|
|
||||||
if (res.code === 0) {
|
|
||||||
this.delegationOptions = res.data
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// 查询开启的教代会
|
// 查询开启的教代会
|
||||||
|
|||||||
+15
-24
@@ -6,6 +6,13 @@ layout("/layouts/platform.html"){
|
|||||||
<guava ref="guava">
|
<guava ref="guava">
|
||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
<search @search="doSearch">
|
<search @search="doSearch">
|
||||||
|
<search-item label="教代会">
|
||||||
|
<el-select @change="meetingChange" clearable filterable placeholder="所属教代会"
|
||||||
|
v-model="pageForm.sessionId">
|
||||||
|
<el-option :key="item.id" :label="item.fullName" :value="item.id"
|
||||||
|
v-for="item in sessionOptions"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</search-item>
|
||||||
<search-item label="提案编号">
|
<search-item label="提案编号">
|
||||||
<el-input v-model="pageForm.code" placeholder="提案编号" @keyup.enter.native="doSearch" clearable
|
<el-input v-model="pageForm.code" placeholder="提案编号" @keyup.enter.native="doSearch" clearable
|
||||||
style="width: 100%"></el-input>
|
style="width: 100%"></el-input>
|
||||||
@@ -32,13 +39,6 @@ layout("/layouts/platform.html"){
|
|||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
></el-input>
|
></el-input>
|
||||||
</search-item>
|
</search-item>
|
||||||
<search-item label="教代会">
|
|
||||||
<el-select @change="meetingChange" clearable filterable placeholder="所属教代会"
|
|
||||||
v-model="pageForm.sessionId">
|
|
||||||
<el-option :key="item.id" :label="item.fullName" :value="item.id"
|
|
||||||
v-for="item in sessionOptions"></el-option>
|
|
||||||
</el-select>
|
|
||||||
</search-item>
|
|
||||||
</search>
|
</search>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
@@ -92,9 +92,12 @@ layout("/layouts/platform.html"){
|
|||||||
<el-form-item label="承办单位">
|
<el-form-item label="承办单位">
|
||||||
<el-input :value="formData.taskUnitName" disabled></el-input>
|
<el-input :value="formData.taskUnitName" disabled></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- <el-form-item label="落实情况" prop="implementState" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">-->
|
<el-form-item label="落实情况" prop="tf_implementState"
|
||||||
<!-- <dict-select v-model="formData.implementState" code="PROPOSAL_REPLY_IMPLEMENT"></dict-select>-->
|
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||||
<!-- </el-form-item>-->
|
<el-radio-group v-model="formData.tf_implementState" size="small">
|
||||||
|
<el-radio v-for="item in dict.type.PROPOSAL_REPLY_IMPLEMENT" :label="item.code" border>{{item.label}}</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item label="答复内容" prop="tf_opinion"
|
<el-form-item label="答复内容" prop="tf_opinion"
|
||||||
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||||
<text-editor v-model="formData.tf_opinion"></text-editor>
|
<text-editor v-model="formData.tf_opinion"></text-editor>
|
||||||
@@ -124,7 +127,7 @@ layout("/layouts/platform.html"){
|
|||||||
new Vue({
|
new Vue({
|
||||||
el: "#app",
|
el: "#app",
|
||||||
store,
|
store,
|
||||||
dicts: ["PROPOSAL_CASE_FILING_RESULT"],
|
dicts: ["PROPOSAL_CASE_FILING_RESULT","PROPOSAL_REPLY_IMPLEMENT"],
|
||||||
mixins: [initTableMixins],
|
mixins: [initTableMixins],
|
||||||
components: {
|
components: {
|
||||||
"proposal-info": PROPOSAL_INFO
|
"proposal-info": PROPOSAL_INFO
|
||||||
@@ -216,19 +219,7 @@ layout("/layouts/platform.html"){
|
|||||||
|
|
||||||
// 教代会
|
// 教代会
|
||||||
async meetingChange(val) {
|
async meetingChange(val) {
|
||||||
this.formData.delegationId = null
|
this.doSearch()
|
||||||
this.formData.committeeId = null
|
|
||||||
this.delegationOptions = await proposal.getDelegation(val)
|
|
||||||
this.committeeOptions = await this.getInstitutions(val)
|
|
||||||
},
|
|
||||||
|
|
||||||
// 代表团
|
|
||||||
listDelegation() {
|
|
||||||
this.$axios.post("/platform/proposal/common/listDelegation", {sessionId: this.pageForm.sessionId}).then((res) => {
|
|
||||||
if (res.code === 0) {
|
|
||||||
this.delegationOptions = res.data
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// 查询开启的教代会
|
// 查询开启的教代会
|
||||||
|
|||||||
+28
-16
@@ -99,27 +99,38 @@ layout("/layouts/platform.html"){
|
|||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<el-form-item label="提案摘要" prop="excerpt">
|
<!-- <el-form-item label="提案摘要" prop="excerpt">-->
|
||||||
<span slot="label">
|
<!-- <span slot="label">-->
|
||||||
提案摘要
|
<!-- 提案摘要-->
|
||||||
<el-tooltip content="请简述提案内容和依据、改进建议和措施摘要" placement="right">
|
<!-- <el-tooltip content="请简述提案内容和依据、改进建议和措施摘要" placement="right">-->
|
||||||
<i class="el-icon-question"></i>
|
<!-- <i class="el-icon-question"></i>-->
|
||||||
</el-tooltip>
|
<!-- </el-tooltip>-->
|
||||||
</span>
|
<!-- </span>-->
|
||||||
|
<!-- <el-input-->
|
||||||
|
<!-- v-model="formData.excerpt"-->
|
||||||
|
<!-- type="textarea"-->
|
||||||
|
<!-- autosize-->
|
||||||
|
<!-- :autosize="{ minRows: 4, maxRows: 4}"-->
|
||||||
|
<!-- placeholder="提案摘要"-->
|
||||||
|
<!-- ></el-input>-->
|
||||||
|
<!-- </el-form-item>-->
|
||||||
|
|
||||||
|
<el-form-item label="调研情况" prop="researchFindings">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="formData.excerpt"
|
v-model="formData.researchFindings"
|
||||||
type="textarea"
|
type="textarea"
|
||||||
autosize
|
autosize
|
||||||
:autosize="{ minRows: 4, maxRows: 4}"
|
:autosize="{ minRows: 4, maxRows: 4}"
|
||||||
placeholder="提案摘要"
|
placeholder="调研情况"
|
||||||
></el-input>
|
></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="提案内容和依据" prop="brief">
|
|
||||||
<text-editor v-model="formData.brief" key="brief" placeholder="提案内容和依据"></text-editor>
|
<el-form-item label="案由" prop="brief">
|
||||||
|
<text-editor v-model="formData.brief" key="brief" placeholder="案由"></text-editor>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="改进建议和措施" prop="measures">
|
<el-form-item label="建议措施" prop="measures">
|
||||||
<text-editor v-model="formData.measures" key="measures"
|
<text-editor v-model="formData.measures" key="measures"
|
||||||
placeholder="改进建议和措施"></text-editor>
|
placeholder="建议措施"></text-editor>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="附件上传" prop="files">
|
<el-form-item label="附件上传" prop="files">
|
||||||
<file-upload
|
<file-upload
|
||||||
@@ -131,9 +142,9 @@ layout("/layouts/platform.html"){
|
|||||||
></file-upload>
|
></file-upload>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="电子签名" prop="signature">
|
<!-- <el-form-item label="电子签名" prop="signature">-->
|
||||||
<pc-signature v-model="formData.signature"></pc-signature>
|
<!-- <pc-signature v-model="formData.signature"></pc-signature>-->
|
||||||
</el-form-item>
|
<!-- </el-form-item>-->
|
||||||
</el-form>
|
</el-form>
|
||||||
<el-row justify="end" type="flex" v-if="isWriteTime">
|
<el-row justify="end" type="flex" v-if="isWriteTime">
|
||||||
<el-button @click="onSave" type="primary">保存</el-button>
|
<el-button @click="onSave" type="primary">保存</el-button>
|
||||||
@@ -181,6 +192,7 @@ layout("/layouts/platform.html"){
|
|||||||
implementUnitId: [{required: false, message: "请选择建以落实部门", trigger: ["blur", "change"]}],
|
implementUnitId: [{required: false, message: "请选择建以落实部门", trigger: ["blur", "change"]}],
|
||||||
sign: [{required: true, message: "请扫描二维码进行签字", trigger: ["blur", "change"]}],
|
sign: [{required: true, message: "请扫描二维码进行签字", trigger: ["blur", "change"]}],
|
||||||
excerpt: [{required: true, message: "请填写", trigger: ["blur", "change"]}],
|
excerpt: [{required: true, message: "请填写", trigger: ["blur", "change"]}],
|
||||||
|
researchFindings: [{required: true, message: "请填写", trigger: ["blur", "change"]}],
|
||||||
brief: [{required: true, message: "请填写", trigger: ["blur", "change"]}],
|
brief: [{required: true, message: "请填写", trigger: ["blur", "change"]}],
|
||||||
measures: [{required: true, message: "请填写", trigger: ["blur", "change"]}],
|
measures: [{required: true, message: "请填写", trigger: ["blur", "change"]}],
|
||||||
unitName: [{required: true, message: "请填写", trigger: ["blur", "change"]}],
|
unitName: [{required: true, message: "请填写", trigger: ["blur", "change"]}],
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ layout("/layouts/platform.html"){
|
|||||||
<el-table-column prop="userName" label="投稿人姓名"></el-table-column>
|
<el-table-column prop="userName" label="投稿人姓名"></el-table-column>
|
||||||
<el-table-column prop="unitName" label="投稿人单位"></el-table-column>
|
<el-table-column prop="unitName" label="投稿人单位"></el-table-column>
|
||||||
<el-table-column prop="unionName" label="投稿人工会"></el-table-column>
|
<el-table-column prop="unionName" label="投稿人工会"></el-table-column>
|
||||||
<!-- <el-table-column prop="submitTime" label="投稿时间"></el-table-column>-->
|
<!-- <el-table-column prop="submitTime" label="投稿时间"></el-table-column>-->
|
||||||
<el-table-column prop="curTaskName" label="当前节点"></el-table-column>
|
<el-table-column prop="curTaskName" label="当前节点"></el-table-column>
|
||||||
<el-table-column prop="instanceState" label="流程状态">
|
<el-table-column prop="instanceState" label="流程状态">
|
||||||
<template slot-scope="{row}">
|
<template slot-scope="{row}">
|
||||||
@@ -39,8 +39,10 @@ layout("/layouts/platform.html"){
|
|||||||
<el-table-column label="操作" fixed="right" width="200px">
|
<el-table-column label="操作" fixed="right" width="200px">
|
||||||
<template slot-scope="{row}">
|
<template slot-scope="{row}">
|
||||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||||
<el-button v-if="row.taskState === 10" @click="openAudit(row)" size="mini" type="primary">审核</el-button>
|
<el-button v-if="row.taskState === 10" @click="openAudit(row)" size="mini" type="primary">审核
|
||||||
<el-button v-if="row.canRevoke" @click="onRevoke(row)" size="mini" type="danger">撤回</el-button>
|
</el-button>
|
||||||
|
<el-button v-if="row.canRevoke" @click="onRevoke(row)" size="mini" type="danger">撤回
|
||||||
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
@@ -79,7 +81,7 @@ layout("/layouts/platform.html"){
|
|||||||
new Vue({
|
new Vue({
|
||||||
el: "#app",
|
el: "#app",
|
||||||
store,
|
store,
|
||||||
mixins: [initTableMixins],
|
mixins: [initTableMixins, flowMixins],
|
||||||
components: {
|
components: {
|
||||||
"suggestion-info": SUGGESTION_INFO
|
"suggestion-info": SUGGESTION_INFO
|
||||||
},
|
},
|
||||||
@@ -94,13 +96,13 @@ layout("/layouts/platform.html"){
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
openView(row) {
|
openView(row) {
|
||||||
this.$refs.guava.edit(()=>{
|
this.$refs.guava.edit(() => {
|
||||||
this.showApprovalForm = false
|
this.showApprovalForm = false
|
||||||
this.$refs.suggestionInfoRef.onOpen(row)
|
this.$refs.suggestionInfoRef.onOpen(row)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
openAudit(row) {
|
openAudit(row) {
|
||||||
this.$refs.guava.edit(()=>{
|
this.$refs.guava.edit(() => {
|
||||||
this.showApprovalForm = true
|
this.showApprovalForm = true
|
||||||
this.formData = {
|
this.formData = {
|
||||||
processTaskId: row.taskId,
|
processTaskId: row.taskId,
|
||||||
|
|||||||
Reference in New Issue
Block a user