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。
|
||||
*/
|
||||
@Data
|
||||
public class PageForm<T> {
|
||||
public class PageForm {
|
||||
|
||||
@NotNull(message = "pageNumber不能为空")
|
||||
@Min(value = 1, message = "pageNumber最小为1")
|
||||
@@ -30,8 +30,19 @@ public class PageForm<T> {
|
||||
|
||||
private String searchKeyword;
|
||||
|
||||
/*======================流程参数==============================*/
|
||||
|
||||
/**
|
||||
* 是否审核
|
||||
*/
|
||||
private Boolean audit;
|
||||
|
||||
/**
|
||||
* 业务ID
|
||||
*/
|
||||
private String bizId;
|
||||
|
||||
|
||||
public PageForm defaultSort(String column, String order) {
|
||||
this.setPageOrderName(column);
|
||||
this.setPageOrderBy(order);
|
||||
|
||||
@@ -884,7 +884,6 @@ public interface BaseService<T> {
|
||||
*/
|
||||
Pagination listPageMap(Integer pageNumber, int pageSize, Condition cnd);
|
||||
|
||||
|
||||
/**
|
||||
* DataTable Page
|
||||
*
|
||||
@@ -950,4 +949,12 @@ public interface BaseService<T> {
|
||||
* @return
|
||||
*/
|
||||
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);
|
||||
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;
|
||||
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.bpm.models.BpmProcessInstance;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
@@ -10,7 +9,7 @@ import lombok.EqualsAndHashCode;
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ApiModel(description = "流程实例查询参数")
|
||||
@Data
|
||||
public class BpmProcessInstancePageForm extends PageForm<BpmProcessInstance> {
|
||||
public class BpmProcessInstancePageForm extends PageForm {
|
||||
|
||||
@ApiModelProperty("流程实例名称")
|
||||
private String processInstanceName;
|
||||
|
||||
+3
-1
@@ -25,7 +25,7 @@ import java.util.Map;
|
||||
@IocBean
|
||||
@At("/flow/todoCenter")
|
||||
@Ok("json:full")
|
||||
public class FlowTodoCenter {
|
||||
public class FlowTodoCenterController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@@ -44,6 +44,7 @@ public class FlowTodoCenter {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
t.id AS taskId,
|
||||
t.taskName AS taskKey,
|
||||
t.displayName AS taskName,
|
||||
t.taskState,
|
||||
t.formKey,
|
||||
@@ -79,6 +80,7 @@ public class FlowTodoCenter {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
t.id AS taskId,
|
||||
t.taskName AS taskKey,
|
||||
t.displayName AS taskName,
|
||||
t.taskState,
|
||||
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;
|
||||
|
||||
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.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
@@ -10,7 +9,7 @@ import lombok.EqualsAndHashCode;
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@ApiModel("用户数据拉取分页参数")
|
||||
public class SysDataUserPullPageForm extends PageForm<Sys_user_source> {
|
||||
public class SysDataUserPullPageForm extends PageForm {
|
||||
|
||||
@ApiModelProperty("拉取日期")
|
||||
private String pullTime;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.budwk.app.sys.param;
|
||||
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.sys.views.View_user;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
@@ -10,7 +9,7 @@ import lombok.EqualsAndHashCode;
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@ApiModel("用户数据更新分页参数")
|
||||
public class SysDataUserUpdatePageForm extends PageForm<View_user> {
|
||||
public class SysDataUserUpdatePageForm extends PageForm {
|
||||
|
||||
@ApiModelProperty("姓名")
|
||||
private String userName;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.budwk.app.sys.param;
|
||||
|
||||
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.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
@@ -10,7 +9,7 @@ import lombok.EqualsAndHashCode;
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@ApiModel("系统首页活动管理查询参数")
|
||||
public class SysHomeActivityPageForm extends PageForm<Sys_home_activity> {
|
||||
public class SysHomeActivityPageForm extends PageForm {
|
||||
|
||||
@ApiModelProperty("活动名称")
|
||||
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.web.commons.auth.utils.AuthUtil;
|
||||
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 io.swagger.annotations.ApiModel;
|
||||
import lombok.Data;
|
||||
@@ -23,7 +22,7 @@ import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
@Data
|
||||
@ApiModel("通用分页参数")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class CommonPageParam extends PageForm<ActivityDeclareInfo> {
|
||||
public class CommonPageParam extends PageForm {
|
||||
|
||||
private Integer year;
|
||||
|
||||
|
||||
+2
@@ -114,6 +114,8 @@ public class ArticleClubApprovalController {
|
||||
} else {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
|
||||
}
|
||||
cnd.groupBy("t.id");
|
||||
cnd.desc("t.createdAt");
|
||||
sql.setCondition(cnd);
|
||||
Pagination<NutMap> pageVO = articleService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
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.result.Result;
|
||||
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.service.ArticleService;
|
||||
import com.budwk.app.zhgh.dayofficework.article.vo.ArticleInfoPageVO;
|
||||
@@ -42,15 +43,34 @@ public class ArticleQueryController {
|
||||
public Result pageData(@Valid ArticleInfoPageParam pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.*,
|
||||
info.id,
|
||||
info.title,
|
||||
info.userName,
|
||||
info.loginName,
|
||||
info.unitName,
|
||||
info.unionName,
|
||||
info.submitTime,
|
||||
info.origin,
|
||||
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
|
||||
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
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("ins.state","=", ProcessInstanceStateEnum.FINISHED.getCode());
|
||||
cnd.andEX("YEAR(info.submitTime)", "=", pageForm.getYear());
|
||||
if (StrUtil.isNotBlank(pageForm.getTitle())) {
|
||||
cnd.and(Cnd.likeEX("info.title", pageForm.getTitle()));
|
||||
@@ -65,7 +85,6 @@ public class ArticleQueryController {
|
||||
}else{
|
||||
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
|
||||
}
|
||||
|
||||
cnd.groupBy("info.id");
|
||||
sql.setCondition(cnd);
|
||||
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.FORM_DATA, article);
|
||||
args.set("origin", article.getOrigin());
|
||||
args.set("clubId",article.getClubId());
|
||||
ProcessInstance instance = flowEngine.startProcessInstanceByKey("XWTG", article.getId(), SecurityUtil.getUserId(), args);
|
||||
|
||||
// 自动完成第一个申请任务
|
||||
@@ -109,6 +110,8 @@ public class ArticleWriteController {
|
||||
Dict dict = Dict.create();
|
||||
dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId);
|
||||
dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.RE_APPLY.getCode());
|
||||
dict.set("origin", article.getOrigin());
|
||||
dict.set("clubId",article.getClubId());
|
||||
flowCommonService.executeTask(dict);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
+1
-2
@@ -1,7 +1,6 @@
|
||||
package com.budwk.app.zhgh.dayofficework.article.param;
|
||||
|
||||
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.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
@@ -10,7 +9,7 @@ import lombok.EqualsAndHashCode;
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@ApiModel(value = "稿件分页查询参数")
|
||||
public class ArticleInfoPageParam extends PageForm<Article> {
|
||||
public class ArticleInfoPageParam extends PageForm {
|
||||
|
||||
@ApiModelProperty("稿件标题")
|
||||
private String title;
|
||||
|
||||
+1
-1
@@ -58,7 +58,7 @@ public class EvaluateActivityController {
|
||||
@At
|
||||
@SaCheckPermission("evaluation.activity")
|
||||
@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("""
|
||||
SELECT
|
||||
eva.*,
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.budwk.app.zhgh.dayofficework.evaluation.vo;
|
||||
|
||||
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.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
@@ -10,7 +9,7 @@ import lombok.EqualsAndHashCode;
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ApiModel("评优评先分页参数")
|
||||
@Data
|
||||
public class EvaluatePageForm extends PageForm<EvaluateApply> {
|
||||
public class EvaluatePageForm extends PageForm {
|
||||
|
||||
@ApiModelProperty("年度")
|
||||
private Integer year;
|
||||
|
||||
+1
-1
@@ -13,7 +13,7 @@ import lombok.EqualsAndHashCode;
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class GrassrootsCongressPageForm extends PageForm<GrassrootsCongressPageForm> {
|
||||
public class GrassrootsCongressPageForm extends PageForm {
|
||||
|
||||
private Integer year;
|
||||
|
||||
|
||||
+40
-4
@@ -10,6 +10,7 @@ import com.budwk.app.zhgh.democratic.proposal.service.ProposalExportService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
@@ -48,7 +49,34 @@ public class ProposalExportComprehensiveController {
|
||||
@SaCheckPermission("proposal.query.comprehensive")
|
||||
@ApiOperation(value = "分页列表")
|
||||
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();
|
||||
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
|
||||
cnd.groupBy("info.id");
|
||||
@@ -60,10 +88,10 @@ public class ProposalExportComprehensiveController {
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("导出提案汇总表excel")
|
||||
@ApiOperation("导出汇总表excel")
|
||||
@SaCheckPermission("proposal.query.comprehensive")
|
||||
public void exportProposalSummaryAsExcel(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, HttpServletResponse response){
|
||||
proposalExportService.exportProposalSummaryAsExcel(pageForm, response);
|
||||
public void exportSummaryAsExcel(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, HttpServletResponse response){
|
||||
proposalExportService.exportSummaryAsExcel(pageForm, response);
|
||||
}
|
||||
|
||||
|
||||
@@ -91,4 +119,12 @@ public class ProposalExportComprehensiveController {
|
||||
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,
|
||||
t.displayName curTaskName,
|
||||
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
|
||||
proposal_info info
|
||||
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,
|
||||
t.displayName curTaskName,
|
||||
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
|
||||
proposal_info info
|
||||
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) {
|
||||
NutMap tableRow = NutMap.NEW();
|
||||
tableRow.put("id", underTakeId);
|
||||
if(undertakeMap.get(underTakeId) == null){
|
||||
continue;
|
||||
}
|
||||
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()
|
||||
.filter(v -> {
|
||||
NutMap variable = Json.fromJson(NutMap.class, v.getVariable());
|
||||
@@ -115,17 +116,22 @@ public class ProposalQueryUnitReplyController {
|
||||
.distinct()
|
||||
.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 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("hostSum", hostSum);
|
||||
tableRow.put("hostReplySum", hostReplySum);
|
||||
tableRow.put("hostNoReplySum", hostNoReplySum);
|
||||
tableRow.put("slaveSum", slaveSum);
|
||||
|
||||
// if (slaveNeedReply) {
|
||||
// //协办提案数量
|
||||
|
||||
@@ -112,6 +112,11 @@ public class ProposalInfo extends BaseModel {
|
||||
@ColDefine(type = ColType.TEXT)
|
||||
private String excerpt;
|
||||
|
||||
@Column
|
||||
@Comment("调研情况")
|
||||
@ColDefine(type = ColType.TEXT)
|
||||
private String researchFindings;
|
||||
|
||||
@Column
|
||||
@Comment("案由")
|
||||
@ColDefine(type = ColType.TEXT)
|
||||
|
||||
@@ -3,7 +3,6 @@ package com.budwk.app.zhgh.democratic.proposal.param;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.utils.PageUtil;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.Cnd;
|
||||
@@ -13,7 +12,7 @@ import org.nutz.dao.Cnd;
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class ProposalSearchParam extends PageForm<ProposalInfo> {
|
||||
public class ProposalSearchParam extends PageForm {
|
||||
|
||||
private String name;
|
||||
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 javax.servlet.http.HttpServletResponse;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
@@ -18,6 +19,7 @@ public interface ProposalExportService extends BaseService<ProposalInfo> {
|
||||
|
||||
/**
|
||||
* 某些页面的公共SQL,用于导出或者综合查询
|
||||
*
|
||||
* @param pageForm
|
||||
* @return
|
||||
*/
|
||||
@@ -25,13 +27,15 @@ public interface ProposalExportService extends BaseService<ProposalInfo> {
|
||||
|
||||
/**
|
||||
* 导出提案汇总表excel
|
||||
*
|
||||
* @param pageForm
|
||||
* @param response
|
||||
*/
|
||||
void exportProposalSummaryAsExcel(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response);
|
||||
void exportSummaryAsExcel(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response);
|
||||
|
||||
/**
|
||||
* 导出提案立案汇总表excel
|
||||
*
|
||||
* @param pageForm
|
||||
* @param response
|
||||
*/
|
||||
@@ -39,6 +43,7 @@ public interface ProposalExportService extends BaseService<ProposalInfo> {
|
||||
|
||||
/**
|
||||
* 导出提案统计表zip
|
||||
*
|
||||
* @param pageForm
|
||||
* @param response
|
||||
*/
|
||||
@@ -46,8 +51,25 @@ public interface ProposalExportService extends BaseService<ProposalInfo> {
|
||||
|
||||
/**
|
||||
* 导出反馈表
|
||||
*
|
||||
* @param pageForm
|
||||
* @param 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);
|
||||
|
||||
|
||||
/**
|
||||
* 导出征集表
|
||||
* @param id
|
||||
* @param byteArrayOutputStream
|
||||
*/
|
||||
void exportCollectAsDocx(String id, ByteArrayOutputStream byteArrayOutputStream);
|
||||
|
||||
/**
|
||||
* 根据提案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.vo.BpmProcessTaskVo;
|
||||
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_user;
|
||||
import com.budwk.app.sys.models.Sys_user_role;
|
||||
import com.budwk.app.sys.services.SysRoleService;
|
||||
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.ProposalInfo;
|
||||
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);
|
||||
|
||||
//查询附议人信息
|
||||
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();
|
||||
HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();
|
||||
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
|
||||
public String getDelegationHeadByProposalId(String 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 com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
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.param.ProposalQueryComprehensiveParam;
|
||||
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.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.ddr.poi.html.HtmlRenderPolicy;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
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 javax.servlet.http.HttpServletResponse;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:ProposalExportServiceImpl
|
||||
* @Date 2024/10/10 10:28
|
||||
* @注释
|
||||
*/
|
||||
@IocBean(args = {"refer:dao"})
|
||||
@Slf4j
|
||||
public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> implements ProposalExportService {
|
||||
|
||||
@Inject
|
||||
private ProposalCommonService proposalCommonService;
|
||||
@Inject
|
||||
private SysOfficeTemplateUtil sysOfficeTemplateUtil;
|
||||
|
||||
|
||||
public ProposalExportServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
@@ -139,37 +151,77 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exportProposalSummaryAsExcel(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response) {
|
||||
// 自定义导出 excel
|
||||
Sql sql = exportComprehensiveSql(pageForm);
|
||||
public void exportSummaryAsExcel(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response) {
|
||||
// 基本信息查询
|
||||
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();
|
||||
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
|
||||
cnd.groupBy("info.id");
|
||||
sql.setCondition(cnd);
|
||||
// 导出的数据
|
||||
List<NutMap> list = listMap(sql);
|
||||
for (NutMap row : list) {
|
||||
String content = HtmlUtil.cleanHtmlTag(StrUtil.blankToDefault(row.getString("masterUnderTakeReply"), ""));
|
||||
row.put("masterUnderTakeReply", content);
|
||||
// 添加序号,去除富文本,获取附议人
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
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<>();
|
||||
exportEntities.add(new ExcelExportEntity("序号", "index", 10));
|
||||
exportEntities.add(new ExcelExportEntity("提案编号", "code", 20));
|
||||
exportEntities.add(new ExcelExportEntity("提案名称", "name", 20));
|
||||
exportEntities.add(new ExcelExportEntity("提案类别", "typeName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("提案摘要", "excerpt", 100));
|
||||
exportEntities.add(new ExcelExportEntity("单位", "unitName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("提案案由", "brief", 40));
|
||||
exportEntities.add(new ExcelExportEntity("代表调研情况", "researchFindings", 40));
|
||||
exportEntities.add(new ExcelExportEntity("代表建议措施", "measures", 40));
|
||||
exportEntities.add(new ExcelExportEntity("提案人", "createUserName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("附议人", "secondedUserNames", 40));
|
||||
exportEntities.add(new ExcelExportEntity("立案结果", "caseFilingResultName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("主办单位", "masterUnderTakeName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("协办单位", "slaveUnderTakeNamesStr", 30));
|
||||
exportEntities.add(new ExcelExportEntity("承办单位答复", "masterUnderTakeReply", 30));
|
||||
exportEntities.add(new ExcelExportEntity("备注", "remark", 30));
|
||||
exportEntities.add(new ExcelExportEntity("提案状态", "processInstanceNodeName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("提案人电话", "mobile", 20));
|
||||
exportEntities.add(new ExcelExportEntity("附议人(两名)", "secondedUserNames", 20));
|
||||
exportEntities.add(new ExcelExportEntity("提案单位", "unitName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("拟交办单位", "", 20));
|
||||
|
||||
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.setType(ExcelType.XSSF);
|
||||
@@ -324,6 +376,129 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
||||
} catch (Exception e) {
|
||||
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 com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.utils.PageUtil;
|
||||
import com.budwk.app.zhgh.democratic.suggestion.models.SuggestionInfo;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.Cnd;
|
||||
@@ -13,7 +12,7 @@ import org.nutz.dao.Cnd;
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class SuggestionSearchParam extends PageForm<SuggestionInfo> {
|
||||
public class SuggestionSearchParam extends PageForm {
|
||||
|
||||
private String name;
|
||||
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.zhgh.democratic.suggestionBox.service.SuggestionBoxService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
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.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
@IocBean
|
||||
@@ -39,7 +42,7 @@ public class SuggestionXghController {
|
||||
|
||||
@At
|
||||
@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("""
|
||||
SELECT
|
||||
info.id,
|
||||
@@ -99,5 +102,46 @@ public class SuggestionXghController {
|
||||
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.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.staffbenefit.difficulthelp.models.DifficultHelpInfo;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.Cnd;
|
||||
@@ -23,7 +22,7 @@ import java.util.List;
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class DifficultHelpPageParam extends PageForm<DifficultHelpInfo> {
|
||||
public class DifficultHelpPageParam extends PageForm {
|
||||
|
||||
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 com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.Cnd;
|
||||
@@ -17,7 +16,7 @@ import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class MemberApplyPageForm extends PageForm<MemberApplyRecord> {
|
||||
public class MemberApplyPageForm extends PageForm {
|
||||
|
||||
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 com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
@@ -18,7 +17,7 @@ import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class MemberChangePageForm extends PageForm<MemberChangeRecord> {
|
||||
public class MemberChangePageForm extends PageForm {
|
||||
|
||||
// 工会id
|
||||
@ApiModelProperty("工会id")
|
||||
|
||||
+1
-2
@@ -1,7 +1,6 @@
|
||||
package com.budwk.app.zhgh.staffmanage.sourcechange.param;
|
||||
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.sys.models.Sys_user_history;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@@ -16,7 +15,7 @@ import java.util.List;
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class SourceChangePageForm extends PageForm<Sys_user_history> {
|
||||
public class SourceChangePageForm extends PageForm {
|
||||
|
||||
private String unionId;
|
||||
|
||||
|
||||
+1
-2
@@ -1,7 +1,6 @@
|
||||
package com.budwk.app.zhgh.staffmanage.specialstaff.param;
|
||||
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.specialstaff.model.SpecialStaff;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@@ -14,7 +13,7 @@ import lombok.EqualsAndHashCode;
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class SpecialStaffPageForm extends PageForm<SpecialStaff> {
|
||||
public class SpecialStaffPageForm extends PageForm {
|
||||
|
||||
private String unionId;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user