1
This commit is contained in:
+48
@@ -5,9 +5,12 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.sys.models.Sys_home_activity;
|
||||
import com.budwk.app.sys.models.Sys_home_template;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.zhgh.activity.culture.models.ActivityTissue;
|
||||
import com.budwk.app.zhgh.activity.culture.models.ActivityTissuePerson;
|
||||
import com.budwk.app.zhgh.activity.culture.service.ActivityCultureService;
|
||||
@@ -86,11 +89,56 @@ public class ActivityCultureInfoManageController {
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("activity.culture.infoManage.school")
|
||||
public Result setTemplate(@Valid String id) {
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
return Result.error("无权操作");
|
||||
}
|
||||
ActivityTissue tissue = activityCultureService.fetch(id);
|
||||
if (tissue == null) {
|
||||
return Result.error("活动不存在");
|
||||
}
|
||||
if (tissue.getActivity_type() == null || tissue.getActivity_type() != 40001) {
|
||||
return Result.error("仅校工会文化活动可设为模板");
|
||||
}
|
||||
Sys_home_template oldHomeTemplate = activityCultureService.dao().fetch(Sys_home_template.class, id);
|
||||
Sys_home_template sysHomeTemplate = tissue.covertToSysHomeTemplate();
|
||||
if (oldHomeTemplate != null) {
|
||||
sysHomeTemplate.setTop(oldHomeTemplate.getTop());
|
||||
sysHomeTemplate.setPush(oldHomeTemplate.getPush());
|
||||
sysHomeTemplate.setSortNo(oldHomeTemplate.getSortNo());
|
||||
if (oldHomeTemplate.getTemplateName() != null) {
|
||||
sysHomeTemplate.setTemplateName(oldHomeTemplate.getTemplateName());
|
||||
}
|
||||
if (oldHomeTemplate.getTemplateIcon() != null) {
|
||||
sysHomeTemplate.setTemplateIcon(oldHomeTemplate.getTemplateIcon());
|
||||
}
|
||||
}
|
||||
activityCultureService.dao().insertOrUpdate(sysHomeTemplate);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("activity.culture.infoManage.school")
|
||||
public Result cancelTemplate(@Valid String id) {
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
return Result.error("无权操作");
|
||||
}
|
||||
activityCultureService.dao().delete(Sys_home_template.class, id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "文化活动", msg = "删除了一条活动")
|
||||
@SaCheckPermission(value = {"activity.culture.infoManage.school", "activity.culture.infoManage.union", "activity.culture.infoManage.club"}, mode = SaMode.OR)
|
||||
public Result doDelete(@Valid String id) {
|
||||
if (activityCultureService.dao().fetch(Sys_home_template.class, id) != null) {
|
||||
return Result.error("该活动已设为模板,请先取消模板后再删除");
|
||||
}
|
||||
activityCultureService.delete(id);
|
||||
activityCultureService.dao().clear(ActivityTissuePerson.class, Cnd.where(ActivityTissuePerson::getTissueId, "=", id));
|
||||
activityCultureService.dao().delete(Sys_home_activity.class, id);
|
||||
|
||||
@@ -5,6 +5,7 @@ import cn.hutool.json.JSONObject;
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import com.budwk.app.base.model.CustomFormField;
|
||||
import com.budwk.app.sys.models.Sys_home_activity;
|
||||
import com.budwk.app.sys.models.Sys_home_template;
|
||||
import com.budwk.app.sys.services.SysHomeConvert;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
@@ -291,4 +292,29 @@ public class ActivityTissue extends BaseModel implements Serializable, SysHomeCo
|
||||
sysHomeActivity.setClassPath(this.getClass().getPackageName() + this.getClass().getName());
|
||||
return sysHomeActivity;
|
||||
}
|
||||
|
||||
public Sys_home_template covertToSysHomeTemplate() {
|
||||
Sys_home_template sysHomeTemplate = new Sys_home_template();
|
||||
sysHomeTemplate.setId(this.getId());
|
||||
sysHomeTemplate.setName(this.getName());
|
||||
sysHomeTemplate.setTemplateName(this.getName());
|
||||
sysHomeTemplate.setCover(this.getCover());
|
||||
sysHomeTemplate.setContent(this.getActivityContent());
|
||||
if (this.getActivity_type() == 40001) {
|
||||
sysHomeTemplate.setUrl("/platform/activity/culture/applyActivity/school?mode=edit&id=" + this.getId());
|
||||
} else if (this.getActivity_type() == 40002) {
|
||||
sysHomeTemplate.setUrl("/platform/activity/culture/applyActivity/union?mode=edit&id=" + this.getId());
|
||||
} else {
|
||||
sysHomeTemplate.setUrl("/platform/activity/culture/applyActivity/club?mode=edit&id=" + this.getId());
|
||||
}
|
||||
sysHomeTemplate.setH5Url("");
|
||||
if (Lang.isNotEmpty(this.getApplyStartTime())) {
|
||||
sysHomeTemplate.setStartDate(DateUtil.parseDate(this.getApplyStartTime()));
|
||||
sysHomeTemplate.setEndDate(DateUtil.parseDate(this.getApplyEndTime()));
|
||||
}
|
||||
sysHomeTemplate.setAllowUserGroupId(this.getGroupId());
|
||||
sysHomeTemplate.setEnable(this.getIsUnseal());
|
||||
sysHomeTemplate.setClassPath(this.getClass().getPackageName() + this.getClass().getName());
|
||||
return sysHomeTemplate;
|
||||
}
|
||||
}
|
||||
|
||||
+3
-1
@@ -109,7 +109,8 @@ public class ActivityCultureServiceImpl extends BaseServiceImpl<ActivityTissue>
|
||||
t.taskParentId,
|
||||
t.variable taskVariable,
|
||||
IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke,
|
||||
(select MAX(id) from wf_process_task where processInstanceId = ins.id and taskName = 'startTask') AS startTaskId
|
||||
(select MAX(id) from wf_process_task where processInstanceId = ins.id and taskName = 'startTask') AS startTaskId,
|
||||
IF(sht.id IS NULL, 0, 1) AS isTemplate
|
||||
FROM
|
||||
activity_tissue tissue
|
||||
LEFT JOIN sys_union uni ON uni.id = tissue.unionId
|
||||
@@ -118,6 +119,7 @@ public class ActivityCultureServiceImpl extends BaseServiceImpl<ActivityTissue>
|
||||
LEFT JOIN `wf_process_instance` ins ON ins.businessNo = tissue.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
|
||||
LEFT JOIN sys_home_template sht ON sht.id = tissue.id
|
||||
$condition
|
||||
""");
|
||||
|
||||
|
||||
+32
-5
@@ -1,6 +1,7 @@
|
||||
package com.budwk.app.zhgh.activity.sports.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
@@ -9,6 +10,7 @@ import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.activity.basic.service.ActivityBasicScopeService;
|
||||
import com.budwk.app.zhgh.activity.basic.models.ActivityEvent;
|
||||
import com.budwk.app.zhgh.activity.sports.models.ActivitySchool;
|
||||
import com.budwk.app.zhgh.activity.sports.models.ActivitySchoolEvent;
|
||||
@@ -51,6 +53,9 @@ public class ActivitySportsInfoManageController {
|
||||
@Inject
|
||||
private Dao dao;
|
||||
|
||||
@Inject
|
||||
private ActivityBasicScopeService activityBasicScopeService;
|
||||
|
||||
@At
|
||||
@SaCheckPermission("activity.sports.info")
|
||||
public Object pageData(PageForm page,
|
||||
@@ -128,7 +133,7 @@ public class ActivitySportsInfoManageController {
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("activity.sports.info")
|
||||
@SaCheckPermission(value = {"activity.sports.info", "activity.sports.new"}, mode = SaMode.OR)
|
||||
public Object getEventApply(@Param(value = "activityId") String activityId,
|
||||
@Param(value = "eventId") String[] eventId) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
@@ -149,7 +154,7 @@ public class ActivitySportsInfoManageController {
|
||||
|
||||
@At
|
||||
@SLog(tag = "体育活动", msg = "修改活动")
|
||||
@SaCheckPermission("activity.sports.info")
|
||||
@SaCheckPermission(value = {"activity.sports.info", "activity.sports.new"}, mode = SaMode.OR)
|
||||
public Result doEdit(@Param(value = "data") ActivitySchool activitySchool,
|
||||
@Param(value = "events") ActivitySchoolEvent[] events) {
|
||||
activitySportsService.doEdit(activitySchool, events);
|
||||
@@ -160,7 +165,7 @@ public class ActivitySportsInfoManageController {
|
||||
|
||||
@At
|
||||
@SLog(tag = "体育活动", msg = "添加活动")
|
||||
@SaCheckPermission("activity.sports.info")
|
||||
@SaCheckPermission(value = {"activity.sports.info", "activity.sports.new"}, mode = SaMode.OR)
|
||||
public Result doAdd(@Param(value = "data") ActivitySchool activitySchool,
|
||||
@Param(value = "events") ActivitySchoolEvent[] events) {
|
||||
String id = activitySportsService.doAdd(activitySchool, events);
|
||||
@@ -170,7 +175,7 @@ public class ActivitySportsInfoManageController {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("activity.sports.info")
|
||||
@SaCheckPermission(value = {"activity.sports.info", "activity.sports.new"}, mode = SaMode.OR)
|
||||
public Result findOne(String id) {
|
||||
NutMap nutMap = (NutMap) dao.execute(Sqls.create("SELECT * FROM `activity_school` WHERE id = @id").setParam("id", id)
|
||||
.setCallback(Sqls.callback.map())).getResult();
|
||||
@@ -199,7 +204,7 @@ public class ActivitySportsInfoManageController {
|
||||
|
||||
@At
|
||||
@ApiOperation("根据比赛项目基础表统一赋年龄限制")
|
||||
@SaCheckPermission("activity.sports.info")
|
||||
@SaCheckPermission(value = {"activity.sports.info", "activity.sports.new"}, mode = SaMode.OR)
|
||||
public Object doAssignmentDate(ActivitySchoolEvent[] events) {
|
||||
for (ActivitySchoolEvent event : events) {
|
||||
ActivityEvent activityEvent = dao.fetch(ActivityEvent.class,event.getEventId());
|
||||
@@ -212,6 +217,28 @@ public class ActivitySportsInfoManageController {
|
||||
return Result.success(events);
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("获取分工会人数限制")
|
||||
@SaCheckPermission(value = {"activity.sports.info", "activity.sports.new"}, mode = SaMode.OR)
|
||||
public Result getUnionLimit(@Param(value = "activityScopeId") String activityScopeId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
gh.id,
|
||||
gh.name,
|
||||
gh.unioncode,
|
||||
(select count(1) from `vw_user` where unionid = gh.id $cnd) as teacherCount,
|
||||
NULL as ratio,
|
||||
NULL as limitCount
|
||||
FROM
|
||||
sys_union gh
|
||||
order by gh.unioncode
|
||||
""");
|
||||
if (StrUtil.isNotBlank(activityScopeId)) {
|
||||
sql.setVar("cnd", "AND id in (" + activityBasicScopeService.buildGroupUserIdSubSqlText(Integer.valueOf(activityScopeId)) + ")");
|
||||
}
|
||||
return Result.success(activitySportsService.listMap(sql));
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package com.budwk.app.zhgh.activity.sports.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import io.swagger.annotations.Api;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/activity/sports/new")
|
||||
@Ok("json:full")
|
||||
@Api(tags = "新建体育活动")
|
||||
public class ActivitySportsNewController {
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:platform/zhgh/activity/sports/new/index.html")
|
||||
@SaCheckPermission(value = {"activity.sports.info", "activity.sports.new"}, mode = SaMode.OR)
|
||||
public void index() {
|
||||
}
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package com.budwk.app.zhgh.activity.trainSignUp.controller.manage;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import io.swagger.annotations.Api;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/trainSignUp/applyActivity")
|
||||
@Ok("json:full")
|
||||
@Api(tags = "品牌活动新建活动")
|
||||
public class TrainSignUpApplyActivityController {
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/activity/trainSignUp/applyActivity/index.html")
|
||||
@SaCheckPermission("trainSignUp.applyActivity")
|
||||
public void index() {
|
||||
}
|
||||
}
|
||||
+62
-7
@@ -1,16 +1,21 @@
|
||||
package com.budwk.app.zhgh.activity.trainSignUp.controller.manage;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.flow.entity.ProcessInstance;
|
||||
import com.budwk.app.flow.enums.ProcessInstanceStateEnum;
|
||||
import com.budwk.app.sys.models.Sys_home_activity;
|
||||
import com.budwk.app.sys.models.Sys_home_template;
|
||||
import com.budwk.app.sys.models.Sys_union;
|
||||
import com.budwk.app.sys.models.Sys_unit;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.zhgh.activity.basic.service.ActivityBasicScopeService;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.models.*;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.service.TrainSignUpActivityService;
|
||||
@@ -72,7 +77,54 @@ public class TrainSignUpManageController {
|
||||
cnd.andEX("year", "=", year);
|
||||
cnd.and(Cnd.likeEX("activityName", activityName));
|
||||
cnd.orderBy("createdAt", "desc");
|
||||
return Result.success().addData(trainSignUpActivityManageService.pageData(pageForm, cnd));
|
||||
Pagination<TrainSignUpActivity> pagination = trainSignUpActivityManageService.pageData(pageForm, cnd);
|
||||
List<TrainSignUpActivity> list = pagination.getList(TrainSignUpActivity.class);
|
||||
if (list != null && !list.isEmpty()) {
|
||||
List<String> ids = list.stream().map(TrainSignUpActivity::getId).toList();
|
||||
List<Sys_home_template> templateList = dao.query(Sys_home_template.class, Cnd.where("id", "in", ids));
|
||||
List<String> templateIds = templateList.stream().map(Sys_home_template::getId).toList();
|
||||
list.forEach(activity -> activity.setIsTemplate(templateIds.contains(activity.getId())));
|
||||
}
|
||||
return Result.success().addData(pagination);
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("设为模板")
|
||||
@SaCheckPermission("trainSignUp.manage")
|
||||
public Result setTemplate(String id) {
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
return Result.error("无权操作");
|
||||
}
|
||||
TrainSignUpActivity activity = trainSignUpActivityManageService.fetch(id);
|
||||
if (activity == null) {
|
||||
return Result.error("活动不存在");
|
||||
}
|
||||
Sys_home_template oldHomeTemplate = dao.fetch(Sys_home_template.class, id);
|
||||
Sys_home_template sysHomeTemplate = activity.covertToSysHomeTemplate();
|
||||
if (oldHomeTemplate != null) {
|
||||
sysHomeTemplate.setTop(oldHomeTemplate.getTop());
|
||||
sysHomeTemplate.setPush(oldHomeTemplate.getPush());
|
||||
sysHomeTemplate.setSortNo(oldHomeTemplate.getSortNo());
|
||||
if (oldHomeTemplate.getTemplateName() != null) {
|
||||
sysHomeTemplate.setTemplateName(oldHomeTemplate.getTemplateName());
|
||||
}
|
||||
if (oldHomeTemplate.getTemplateIcon() != null) {
|
||||
sysHomeTemplate.setTemplateIcon(oldHomeTemplate.getTemplateIcon());
|
||||
}
|
||||
}
|
||||
dao.insertOrUpdate(sysHomeTemplate);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("取消模板")
|
||||
@SaCheckPermission("trainSignUp.manage")
|
||||
public Result cancelTemplate(String id) {
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
return Result.error("无权操作");
|
||||
}
|
||||
dao.delete(Sys_home_template.class, id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@@ -80,6 +132,9 @@ public class TrainSignUpManageController {
|
||||
@SaCheckPermission("trainSignUp.manage")
|
||||
@SLog(tag = "品牌活动-活动管理", msg = "删除活动")
|
||||
public Result onDelete(String id) {
|
||||
if (dao.fetch(Sys_home_template.class, id) != null) {
|
||||
return Result.error("该活动已设为模板,请先取消模板后再删除");
|
||||
}
|
||||
Trans.exec(() -> {
|
||||
trainSignUpActivityManageService.delete(id);
|
||||
dao.clear(TrainSignUpCourse.class, Cnd.where("activityId", "=", id));
|
||||
@@ -106,7 +161,7 @@ public class TrainSignUpManageController {
|
||||
|
||||
@At
|
||||
@ApiOperation("查询单个活动")
|
||||
@SaCheckPermission("trainSignUp")
|
||||
@SaCheckPermission(value = {"trainSignUp", "trainSignUp.manage", "trainSignUp.applyActivity", "h5.trainSignUp.apply"}, mode = SaMode.OR)
|
||||
public Result findOne(@Param("id") @NotNull String id) {
|
||||
NutMap dataMap = trainSignUpActivityManageService.findOne(id, null, "");
|
||||
String activityStartTime = dataMap.getString("activityStartTime");
|
||||
@@ -154,7 +209,7 @@ public class TrainSignUpManageController {
|
||||
@At
|
||||
@Ok("json:full")
|
||||
@ApiOperation("品牌活动新增/修改")
|
||||
@SaCheckPermission("trainSignUp.manage")
|
||||
@SaCheckPermission(value = {"trainSignUp.manage", "trainSignUp.applyActivity"}, mode = SaMode.OR)
|
||||
@SLog(tag = "品牌活动-活动管理", msg = "新增/修改活动")
|
||||
public Result doHandle(TrainSignUpActivity activity) {
|
||||
if (StrUtil.isBlank(activity.getId())) {
|
||||
@@ -168,7 +223,7 @@ public class TrainSignUpManageController {
|
||||
@At
|
||||
@Ok("json:full")
|
||||
@ApiOperation("获取分工会人数限制")
|
||||
@SaCheckPermission("trainSignUp.manage")
|
||||
@SaCheckPermission(value = {"trainSignUp.manage", "trainSignUp.applyActivity"}, mode = SaMode.OR)
|
||||
public Result getUnionLimit(@Param(value = "activityScopeId") String activityScopeId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
@@ -192,7 +247,7 @@ public class TrainSignUpManageController {
|
||||
@At
|
||||
@Ok("json:full")
|
||||
@ApiOperation("获取报名人员数量")
|
||||
@SaCheckPermission("trainSignUp.manage")
|
||||
@SaCheckPermission(value = {"trainSignUp.manage", "trainSignUp.applyActivity"}, mode = SaMode.OR)
|
||||
public Result getRegisterUserCount(@Param(value = "courseId") String courseId) {
|
||||
return Result.success().addData(dao.count(TrainSignUpUser.class, Cnd.where("courseId", "=", courseId)));
|
||||
}
|
||||
@@ -200,7 +255,7 @@ public class TrainSignUpManageController {
|
||||
@At
|
||||
@Ok("json:full")
|
||||
@ApiOperation("获取历史活动列表")
|
||||
@SaCheckPermission("trainSignUp.manage")
|
||||
@SaCheckPermission(value = {"trainSignUp.manage", "trainSignUp.applyActivity"}, mode = SaMode.OR)
|
||||
public Result getHistoricalActList() {
|
||||
List<TrainSignUpActivity> query = dao.query(TrainSignUpActivity.class, Cnd.NEW().desc("activityStartTime"));
|
||||
return Result.success().addData(query);
|
||||
@@ -209,7 +264,7 @@ public class TrainSignUpManageController {
|
||||
@At
|
||||
@Ok("json:full")
|
||||
@ApiOperation("查询分工会和社团")
|
||||
@SaCheckPermission("trainSignUp.manage")
|
||||
@SaCheckPermission(value = {"trainSignUp.manage", "trainSignUp.applyActivity"}, mode = SaMode.OR)
|
||||
public Result selectUnitAndClub() {
|
||||
List<NutMap> result = new ArrayList<>();
|
||||
List<Sys_unit> unitList = dao.query(Sys_unit.class, Cnd.NEW().asc(Sys_unit::getUnitcode));
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.budwk.app.zhgh.activity.trainSignUp.models;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import com.budwk.app.sys.models.Sys_home_activity;
|
||||
import com.budwk.app.sys.models.Sys_home_template;
|
||||
import com.budwk.app.sys.services.SysHomeConvert;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
@@ -109,6 +110,8 @@ public class TrainSignUpActivity extends BaseModel implements Serializable, SysH
|
||||
@Many(field = "activityId")
|
||||
private List<TrainSignUpTypeLimit> typeLimits;
|
||||
|
||||
private Boolean isTemplate;
|
||||
|
||||
@Column
|
||||
@Comment("活动类型")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 20)
|
||||
@@ -141,4 +144,23 @@ public class TrainSignUpActivity extends BaseModel implements Serializable, SysH
|
||||
sysHomeActivity.setClassPath(this.getClass().getPackageName() + this.getClass().getName());
|
||||
return sysHomeActivity;
|
||||
}
|
||||
|
||||
public Sys_home_template covertToSysHomeTemplate() {
|
||||
Sys_home_template sysHomeTemplate = new Sys_home_template();
|
||||
sysHomeTemplate.setId(this.getId());
|
||||
sysHomeTemplate.setName(this.getActivityName());
|
||||
sysHomeTemplate.setTemplateName(this.getActivityName());
|
||||
sysHomeTemplate.setCover(this.getCover());
|
||||
sysHomeTemplate.setContent(this.getIntroduce());
|
||||
sysHomeTemplate.setUrl("/platform/trainSignUp/applyActivity?mode=edit&id=" + this.getId());
|
||||
sysHomeTemplate.setH5Url("");
|
||||
if (Lang.isNotEmpty(this.getActivitySignUpStartTime())) {
|
||||
sysHomeTemplate.setStartDate(this.getActivitySignUpStartTime());
|
||||
sysHomeTemplate.setEndDate(this.getActivitySignUpEndTime());
|
||||
}
|
||||
sysHomeTemplate.setAllowUserGroupId(this.getActivityGroupId());
|
||||
sysHomeTemplate.setEnable(!this.isDisabled());
|
||||
sysHomeTemplate.setClassPath(this.getClass().getPackageName() + this.getClass().getName());
|
||||
return sysHomeTemplate;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -105,12 +105,12 @@ public class AssetManageController {
|
||||
@SLog(type = "assetManage", tag = "资产管理", msg = "编辑了一条资产信息")
|
||||
@SaCheckPermission("asset.manage")
|
||||
public Result doEdit(Asset asset) {
|
||||
Asset fetch = assetService.fetch(asset.getId());
|
||||
assetService.update(asset);
|
||||
|
||||
//增加折旧表记录
|
||||
Asset fetch = assetService.fetch(asset.getId());
|
||||
//如果资产类型不等于原来的或者预计报废时间不等于原来的
|
||||
if (!fetch.getAssetCategoryId().equals(asset.getAssetCategoryId()) || !fetch.getAssetRetiredAssetsDate().equals(asset.getAssetRetiredAssetsDate())) {
|
||||
if (!ObjectUtil.equal(fetch.getAssetCategoryId(), asset.getAssetCategoryId()) || !ObjectUtil.equal(fetch.getAssetRetiredAssetsDate(), asset.getAssetRetiredAssetsDate())) {
|
||||
assetDepreciationRecordService.clear(Cnd.where("assetId", "=", asset.getId()));
|
||||
AssetDepreciationRecord record = assetDepreciationRecordService.initAssetDepreciationRecord(asset.getAssetUnitPrice(), asset.getAssetQuantity(), asset.getAssetUsedDate(), asset.getAssetRetiredAssetsDate());
|
||||
if (ObjectUtil.isNotEmpty(record)) {
|
||||
|
||||
@@ -70,7 +70,7 @@ public class Asset extends BaseModel implements Serializable {
|
||||
|
||||
@Column
|
||||
@Comment("单价")
|
||||
@ColDefine(customType = "decimal(10,2)")
|
||||
@ColDefine(customType = "decimal(18,2)")
|
||||
private BigDecimal assetUnitPrice;
|
||||
|
||||
@Column
|
||||
|
||||
+4
-4
@@ -43,22 +43,22 @@ public class AssetDepreciationRecord extends BaseModel implements Serializable {
|
||||
|
||||
@Column
|
||||
@Comment("资产全部的价值")
|
||||
@ColDefine(customType = "decimal(10,2)")
|
||||
@ColDefine(customType = "decimal(18,2)")
|
||||
private BigDecimal assetAllMoney;
|
||||
|
||||
@Column
|
||||
@Comment("剩余价值")
|
||||
@ColDefine(customType = "decimal(10,2)")
|
||||
@ColDefine(customType = "decimal(18,2)")
|
||||
private BigDecimal assetSurplusMoney;
|
||||
|
||||
@Column
|
||||
@Comment("累计折旧多少钱")
|
||||
@ColDefine(customType = "decimal(10,2)")
|
||||
@ColDefine(customType = "decimal(18,2)")
|
||||
private BigDecimal assetDepreciationMoney;
|
||||
|
||||
@Column
|
||||
@Comment("平均一个月多少钱")
|
||||
@ColDefine(customType = "decimal(10,2)")
|
||||
@ColDefine(customType = "decimal(18,2)")
|
||||
private BigDecimal assetAverageMonthMoney;
|
||||
|
||||
@Column
|
||||
|
||||
+14
-4
@@ -53,6 +53,16 @@ public class AssetDepreciationRecordServiceImpl extends BaseServiceImpl<AssetDep
|
||||
//计算资产使用时间到现在使用了几个月
|
||||
long usedMonth = ChronoUnit.MONTHS.between(assetUsedDateLocalDate, LocalDate.now());
|
||||
AssetDepreciationRecord record = new AssetDepreciationRecord();
|
||||
BigDecimal assetAllMoney = assetUnitPrice.multiply(new BigDecimal(assetQuantity));
|
||||
if (wholeMonth <= 0) {
|
||||
record.setAssetRetiredAssetsDate(assetRetiredAssetsDate);
|
||||
record.setAssetRemainingMonths(0);
|
||||
record.setAssetAllMoney(assetAllMoney);
|
||||
record.setAssetAverageMonthMoney(assetAllMoney);
|
||||
record.setAssetSurplusMoney(BigDecimal.ZERO);
|
||||
record.setAssetDepreciationMoney(assetAllMoney);
|
||||
return record;
|
||||
}
|
||||
//如果折旧到期时间小于现在时间直接设为0
|
||||
if (assetRetiredAssetsDateLocalDate.isBefore(LocalDate.now())) {
|
||||
//预计折旧到期时间
|
||||
@@ -60,12 +70,12 @@ public class AssetDepreciationRecordServiceImpl extends BaseServiceImpl<AssetDep
|
||||
//资产剩余的月
|
||||
record.setAssetRemainingMonths(0);
|
||||
//资产全部的金额
|
||||
record.setAssetAllMoney(assetUnitPrice.multiply(new BigDecimal(assetQuantity)));
|
||||
record.setAssetAllMoney(assetAllMoney);
|
||||
//资产平均每月价值
|
||||
record.setAssetAverageMonthMoney(record.getAssetAllMoney().divide(new BigDecimal(wholeMonth), 2, RoundingMode.DOWN));
|
||||
//剩余价值
|
||||
record.setAssetSurplusMoney(BigDecimal.ZERO);
|
||||
record.setAssetDepreciationMoney(assetUnitPrice.multiply(new BigDecimal(assetQuantity)));
|
||||
record.setAssetDepreciationMoney(assetAllMoney);
|
||||
return record;
|
||||
} else if (wholeMonth - usedMonth >= 0) {
|
||||
//预计折旧到期时间
|
||||
@@ -73,13 +83,13 @@ public class AssetDepreciationRecordServiceImpl extends BaseServiceImpl<AssetDep
|
||||
//资产剩余的月
|
||||
record.setAssetRemainingMonths((int) (wholeMonth - usedMonth < 0 ? 0 : wholeMonth - usedMonth));
|
||||
//资产全部的金额
|
||||
record.setAssetAllMoney(assetUnitPrice.multiply(new BigDecimal(assetQuantity)));
|
||||
record.setAssetAllMoney(assetAllMoney);
|
||||
//资产平均每月价值
|
||||
record.setAssetAverageMonthMoney(record.getAssetAllMoney().divide(new BigDecimal(wholeMonth), 2, RoundingMode.DOWN));
|
||||
//剩余价值
|
||||
if (usedMonth == 0) {
|
||||
//如果等于0代表一个月都没用到直接设为全部的金额
|
||||
record.setAssetSurplusMoney(assetUnitPrice.multiply(new BigDecimal(assetQuantity)));
|
||||
record.setAssetSurplusMoney(assetAllMoney);
|
||||
} else {
|
||||
record.setAssetSurplusMoney(record.getAssetAverageMonthMoney().multiply(BigDecimal.valueOf(record.getAssetRemainingMonths())));
|
||||
}
|
||||
|
||||
+110
-10
@@ -1,18 +1,17 @@
|
||||
package com.budwk.app.zhgh.dayofficework.buildHome.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.exception.BaseException;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.base.utils.CommonDownloadUtil;
|
||||
import com.budwk.app.base.utils.SysOfficeTemplateUtil;
|
||||
import com.budwk.app.sys.models.Sys_union;
|
||||
import com.budwk.app.sys.views.View_user;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.dayofficework.buildHome.models.BuildHomeLittleHouse;
|
||||
@@ -22,10 +21,12 @@ import com.deepoove.poi.config.Configure;
|
||||
import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
|
||||
import io.swagger.annotations.Api;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
@@ -34,7 +35,6 @@ import org.nutz.mvc.annotation.Ok;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@@ -67,9 +67,14 @@ public class BuildHomeLittleHouseController {
|
||||
public Result pageData(BuildHomeLittleHousePageForm pageForm) {
|
||||
Sql sql = Sqls.create("select * from build_home_little_house $condition");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("unionId", "=", SecurityUtil.getUnionId());
|
||||
if (!isSysAdmin()) {
|
||||
cnd.and("unionId", "=", SecurityUtil.getUnionId());
|
||||
}
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
cnd.where().andLike("unitName", pageForm.getSearchKeyword());
|
||||
SqlExpressionGroup searchGroup = new SqlExpressionGroup();
|
||||
searchGroup.orLike("unitName", pageForm.getSearchKeyword());
|
||||
searchGroup.orLike("unionName", pageForm.getSearchKeyword());
|
||||
cnd.where().and(searchGroup);
|
||||
}
|
||||
cnd.asc("sortNum");
|
||||
sql.setCondition(cnd);
|
||||
@@ -77,12 +82,19 @@ public class BuildHomeLittleHouseController {
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("buildHome.littleHouse")
|
||||
public Result currentUserOrg() {
|
||||
return Result.success(getCurrentUserOrg());
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("buildHome.littleHouse")
|
||||
public Result save(BuildHomeLittleHouse house) {
|
||||
if (house.getId() == null) {
|
||||
house.setUnionId(SecurityUtil.getUnionId());
|
||||
house.setUnionName(SecurityUtil.getUnionId());
|
||||
fillCurrentUserOrg(house);
|
||||
} else {
|
||||
keepOriginalOrg(house);
|
||||
}
|
||||
dao.insertOrUpdate(house);
|
||||
return Result.success();
|
||||
@@ -102,22 +114,64 @@ public class BuildHomeLittleHouseController {
|
||||
return Result.success(house);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("buildHome.littleHouse")
|
||||
public Result saveCoordinate(Long id, Double mapX, Double mapY) {
|
||||
if (!isSysAdmin()) {
|
||||
return Result.error("仅系统管理员可以采集坐标");
|
||||
}
|
||||
if (id == null) {
|
||||
return Result.error("小家记录ID不能为空");
|
||||
}
|
||||
if (!isValidCoordinate(mapX) || !isValidCoordinate(mapY)) {
|
||||
return Result.error("坐标范围必须在0到100之间");
|
||||
}
|
||||
BuildHomeLittleHouse house = dao.fetch(BuildHomeLittleHouse.class, id);
|
||||
if (house == null) {
|
||||
return Result.error("未找到小家记录");
|
||||
}
|
||||
dao.update(BuildHomeLittleHouse.class, Chain.make("mapX", mapX).add("mapY", mapY), Cnd.where("id", "=", id));
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("buildHome.littleHouse")
|
||||
public Result clearCoordinate(Long id) {
|
||||
if (!isSysAdmin()) {
|
||||
return Result.error("仅系统管理员可以清空坐标");
|
||||
}
|
||||
if (id == null) {
|
||||
return Result.error("小家记录ID不能为空");
|
||||
}
|
||||
BuildHomeLittleHouse house = dao.fetch(BuildHomeLittleHouse.class, id);
|
||||
if (house == null) {
|
||||
return Result.error("未找到小家记录");
|
||||
}
|
||||
dao.update(BuildHomeLittleHouse.class, Chain.make("mapX", null).add("mapY", null), Cnd.where("id", "=", id));
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At("/exportXlsx")
|
||||
@SaCheckPermission("buildHome.littleHouse")
|
||||
@Ok("void")
|
||||
public void exportXlsx(HttpServletResponse response) {
|
||||
try {
|
||||
boolean sysAdmin = isSysAdmin();
|
||||
String unionId = SecurityUtil.getUnionId();
|
||||
Cnd cnd = Cnd.where("unionId", "=", unionId);
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (!sysAdmin) {
|
||||
cnd.and("unionId", "=", unionId);
|
||||
}
|
||||
cnd.asc("sortNum");
|
||||
|
||||
Sys_union union = dao.fetch(Sys_union.class, unionId);
|
||||
if (union == null) {
|
||||
if (!sysAdmin && union == null) {
|
||||
throw new BaseException("未找到ID为 " + unionId + " 的工会信息");
|
||||
}
|
||||
|
||||
// 准备文档数据Map
|
||||
Map<String, Object> docMap = new HashMap<>();
|
||||
docMap.put("unionName", union.getName()); // 工会名称
|
||||
docMap.put("unionName", sysAdmin ? "全部工会" : union.getName()); // 工会名称
|
||||
docMap.put("date", DateUtil.today()); // 当前日期
|
||||
|
||||
// 查询小家建设数据并设置序号
|
||||
@@ -151,4 +205,50 @@ public class BuildHomeLittleHouseController {
|
||||
}
|
||||
}
|
||||
|
||||
private void fillCurrentUserOrg(BuildHomeLittleHouse house) {
|
||||
Map<String, String> currentUserOrg = getCurrentUserOrg();
|
||||
house.setUnionId(currentUserOrg.get("unionId"));
|
||||
house.setUnionName(currentUserOrg.get("unionName"));
|
||||
house.setUnitId(currentUserOrg.get("unitId"));
|
||||
house.setUnitName(currentUserOrg.get("unitName"));
|
||||
}
|
||||
|
||||
private void keepOriginalOrg(BuildHomeLittleHouse house) {
|
||||
BuildHomeLittleHouse oldHouse = dao.fetch(BuildHomeLittleHouse.class, house.getId());
|
||||
if (oldHouse == null) {
|
||||
fillCurrentUserOrg(house);
|
||||
return;
|
||||
}
|
||||
house.setUnionId(oldHouse.getUnionId());
|
||||
house.setUnionName(oldHouse.getUnionName());
|
||||
house.setUnitId(oldHouse.getUnitId());
|
||||
house.setUnitName(oldHouse.getUnitName());
|
||||
}
|
||||
|
||||
private Map<String, String> getCurrentUserOrg() {
|
||||
Map<String, String> currentUserOrg = new HashMap<>();
|
||||
View_user user = dao.fetch(View_user.class, Cnd.where("id", "=", SecurityUtil.getUserId()));
|
||||
|
||||
String unionId = user != null && StrUtil.isNotBlank(user.getUnionId()) ? user.getUnionId() : SecurityUtil.getUnionId();
|
||||
String unionName = user != null ? user.getUnionName() : null;
|
||||
if (StrUtil.isBlank(unionName) && StrUtil.isNotBlank(unionId)) {
|
||||
Sys_union union = dao.fetch(Sys_union.class, unionId);
|
||||
unionName = union != null ? union.getName() : unionId;
|
||||
}
|
||||
|
||||
currentUserOrg.put("unionId", unionId);
|
||||
currentUserOrg.put("unionName", unionName);
|
||||
currentUserOrg.put("unitId", user != null ? user.getUnitId() : SecurityUtil.getUnitId());
|
||||
currentUserOrg.put("unitName", user != null ? user.getUnitName() : null);
|
||||
return currentUserOrg;
|
||||
}
|
||||
|
||||
private boolean isSysAdmin() {
|
||||
return AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name());
|
||||
}
|
||||
|
||||
private boolean isValidCoordinate(Double value) {
|
||||
return value != null && value >= 0 && value <= 100;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+23
@@ -1,10 +1,13 @@
|
||||
package com.budwk.app.zhgh.dayofficework.buildHome.models;
|
||||
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Table("build_home_little_house")
|
||||
@@ -22,6 +25,11 @@ public class BuildHomeLittleHouse extends BaseModel {
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String unitName;
|
||||
|
||||
@Column
|
||||
@Comment("单位ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String unitId;
|
||||
|
||||
@Column
|
||||
@Comment("分工会ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@@ -52,6 +60,21 @@ public class BuildHomeLittleHouse extends BaseModel {
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String openTime;
|
||||
|
||||
@Column
|
||||
@Comment("图片视频资料")
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
private List<JSONObject> mediaFiles;
|
||||
|
||||
@Column
|
||||
@Comment("地图X坐标百分比")
|
||||
@ColDefine(type = ColType.FLOAT, width = 8, precision = 4)
|
||||
private Double mapX;
|
||||
|
||||
@Column
|
||||
@Comment("地图Y坐标百分比")
|
||||
@ColDefine(type = ColType.FLOAT, width = 8, precision = 4)
|
||||
private Double mapY;
|
||||
|
||||
@Column
|
||||
@Comment("排序")
|
||||
@ColDefine(type = ColType.INT)
|
||||
|
||||
@@ -0,0 +1,570 @@
|
||||
package com.budwk.app.zhgh.dayofficework.caredata;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import io.swagger.annotations.Api;
|
||||
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 org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/careData/leader")
|
||||
@Api("Leader dashboard")
|
||||
@Ok("json:full")
|
||||
public class CareDataLeaderCon {
|
||||
|
||||
private static final int FINISHED_STATE = 20;
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/careData/leader/indexOverlay.html")
|
||||
@SaCheckPermission("careData.union")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At("proposal")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/careData/leader/proposalOverlay.html")
|
||||
@SaCheckPermission("careData.union")
|
||||
public void proposal() {
|
||||
}
|
||||
|
||||
@At("condolence")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/careData/leader/condolenceOverlay.html")
|
||||
@SaCheckPermission("careData.union")
|
||||
public void condolence() {
|
||||
}
|
||||
|
||||
@At("baseUnion")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/careData/leader/baseUnionOverlay.html")
|
||||
@SaCheckPermission("careData.union")
|
||||
public void baseUnion() {
|
||||
}
|
||||
|
||||
@At("club")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/careData/leader/clubOverlay.html")
|
||||
@SaCheckPermission("careData.union")
|
||||
public void club() {
|
||||
}
|
||||
|
||||
@At("dataMetric")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/careData/leader/dataMetricOverlay.html")
|
||||
@SaCheckPermission("careData.union")
|
||||
public void dataMetric() {
|
||||
}
|
||||
|
||||
@At("assetData")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/careData/leader/assetDataOverlay.html")
|
||||
@SaCheckPermission("careData.union")
|
||||
public void assetData() {
|
||||
}
|
||||
|
||||
@At("staffHome")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/careData/leader/staffHomeOverlay.html")
|
||||
@SaCheckPermission("careData.union")
|
||||
public void staffHome() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("careData.union")
|
||||
public Result proposalData(String sessionId) {
|
||||
String currentSessionId = StrUtil.blankToDefault(sessionId, latestSessionId());
|
||||
if (StrUtil.isBlank(currentSessionId)) {
|
||||
return Result.success(NutMap.NEW());
|
||||
}
|
||||
|
||||
NutMap session = sessionInfo(currentSessionId);
|
||||
List<NutMap> caseResults = caseResultData(currentSessionId);
|
||||
NutMap overview = overviewData(currentSessionId, caseResults);
|
||||
|
||||
return Result.success(NutMap.NEW()
|
||||
.addv("session", session)
|
||||
.addv("overview", overview)
|
||||
.addv("caseResults", caseResults));
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("careData.union")
|
||||
public Result condolenceData(Integer year) {
|
||||
int targetYear = year == null ? LocalDate.now().getYear() : year;
|
||||
List<NutMap> rows = condolenceTypeRows(targetYear);
|
||||
long total = rows.stream().mapToLong(row -> row.getLong("count", 0L)).sum();
|
||||
List<NutMap> sortedRows = new ArrayList<>(rows);
|
||||
sortedRows.sort((left, right) -> Long.compare(right.getLong("count", 0L), left.getLong("count", 0L)));
|
||||
List<NutMap> topRows = new ArrayList<>();
|
||||
int index = 1;
|
||||
for (NutMap row : sortedRows) {
|
||||
if (index > 5) {
|
||||
break;
|
||||
}
|
||||
long count = row.getLong("count", 0L);
|
||||
topRows.add(NutMap.NEW()
|
||||
.addv("index", index++)
|
||||
.addv("typeId", row.getString("id", ""))
|
||||
.addv("typeCode", row.getString("code", ""))
|
||||
.addv("name", row.getString("name", ""))
|
||||
.addv("count", count)
|
||||
.addv("rate", percent(count, total))
|
||||
.addv("rateValue", percentValue(count, total)));
|
||||
}
|
||||
|
||||
return Result.success(NutMap.NEW()
|
||||
.addv("year", targetYear)
|
||||
.addv("total", total)
|
||||
.addv("types", topRows));
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("careData.union")
|
||||
public Result baseUnionData() {
|
||||
return Result.success(NutMap.NEW().addv("unions", baseUnionRows()));
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("careData.union")
|
||||
public Result clubData() {
|
||||
return Result.success(NutMap.NEW().addv("clubs", clubRows()));
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("careData.union")
|
||||
public Result dataMetricData(Integer year) {
|
||||
int targetYear = year == null ? LocalDate.now().getYear() : year;
|
||||
return Result.success(NutMap.NEW()
|
||||
.addv("year", targetYear)
|
||||
.addv("budgetTotal", schoolBudgetTotal(targetYear))
|
||||
.addv("tourCount", tourCount(targetYear))
|
||||
.addv("honorCount", honorCount(targetYear))
|
||||
.addv("difficultCount", difficultCount(targetYear))
|
||||
.addv("reimburseTotal", reimburseTotal(targetYear)));
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("careData.union")
|
||||
public Result assetDataData() {
|
||||
List<NutMap> states = assetUsageStateRows();
|
||||
long total = states.stream().mapToLong(row -> row.getLong("value", 0L)).sum();
|
||||
return Result.success(NutMap.NEW()
|
||||
.addv("total", total)
|
||||
.addv("states", states));
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("careData.union")
|
||||
public Result staffHomeData() {
|
||||
return Result.success(NutMap.NEW().addv("houses", littleHouseRows()));
|
||||
}
|
||||
|
||||
private List<NutMap> littleHouseRows() {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
id,
|
||||
unionName,
|
||||
unitName,
|
||||
address,
|
||||
mediaFiles,
|
||||
mapX,
|
||||
mapY,
|
||||
sortNum
|
||||
FROM build_home_little_house
|
||||
WHERE mapX IS NOT NULL
|
||||
AND mapY IS NOT NULL
|
||||
$unionFilter
|
||||
ORDER BY sortNum ASC, id ASC
|
||||
""");
|
||||
if (canViewAllUnionData()) {
|
||||
sql.setVar("unionFilter", "");
|
||||
} else {
|
||||
sql.setVar("unionFilter", "AND unionId = @unionId");
|
||||
sql.setParam("unionId", SecurityUtil.getUnionId());
|
||||
}
|
||||
return listMap(sql);
|
||||
}
|
||||
|
||||
private String latestSessionId() {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT id
|
||||
FROM teacher_congress_session
|
||||
ORDER BY startDate DESC
|
||||
LIMIT 1
|
||||
""");
|
||||
return firstMap(sql).getString("id", "");
|
||||
}
|
||||
|
||||
private List<NutMap> condolenceTypeRows(int year) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
t.id,
|
||||
t.code,
|
||||
t.name,
|
||||
COUNT(info.id) AS count
|
||||
FROM condolence_type t
|
||||
LEFT JOIN condolence info ON info.type = t.id
|
||||
AND YEAR(info.createTime) = @year
|
||||
$unionFilter
|
||||
WHERE t.enable = 1
|
||||
GROUP BY t.id, t.code, t.name, t.sortNum
|
||||
ORDER BY count DESC, t.sortNum ASC, t.code ASC
|
||||
""");
|
||||
sql.setParam("year", year);
|
||||
if (canViewAllUnionData()) {
|
||||
sql.setVar("unionFilter", "");
|
||||
} else {
|
||||
sql.setVar("unionFilter", "AND info.applyUnionId = @unionId");
|
||||
sql.setParam("unionId", SecurityUtil.getUnionId());
|
||||
}
|
||||
return listMap(sql);
|
||||
}
|
||||
|
||||
private List<NutMap> baseUnionRows() {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
un.id,
|
||||
un.name AS unionname,
|
||||
un.unionCode,
|
||||
(
|
||||
SELECT COUNT(1)
|
||||
FROM vw_user u
|
||||
WHERE u.member = 1
|
||||
AND u.unionId = un.id
|
||||
) AS value
|
||||
FROM sys_union un
|
||||
WHERE un.delFlag = 0
|
||||
$unionFilter
|
||||
ORDER BY un.unionCode
|
||||
""");
|
||||
if (canViewAllUnionData()) {
|
||||
sql.setVar("unionFilter", "");
|
||||
} else {
|
||||
sql.setVar("unionFilter", "AND un.id = @unionId");
|
||||
sql.setParam("unionId", SecurityUtil.getUnionId());
|
||||
}
|
||||
return listMap(sql);
|
||||
}
|
||||
|
||||
private List<NutMap> clubRows() {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
c.id,
|
||||
c.clubName,
|
||||
c.clubCode,
|
||||
(
|
||||
SELECT COUNT(1)
|
||||
FROM club_user cu
|
||||
WHERE cu.clubId = c.id
|
||||
AND cu.delFlag = 0
|
||||
) AS value
|
||||
FROM sys_club c
|
||||
WHERE c.delFlag = 0
|
||||
AND c.dismiss = 0
|
||||
ORDER BY c.clubCode
|
||||
""");
|
||||
return listMap(sql);
|
||||
}
|
||||
|
||||
private List<NutMap> assetUsageStateRows() {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
IFNULL(NULLIF(TRIM(t1.assetUsageStateName), ''), @emptyName) AS name,
|
||||
SUM(IFNULL(t1.assetQuantity, 0)) AS value
|
||||
FROM `asset` t1
|
||||
WHERE 1 = 1
|
||||
$unionFilter
|
||||
GROUP BY IFNULL(NULLIF(TRIM(t1.assetUsageStateName), ''), @emptyName)
|
||||
ORDER BY value DESC, name ASC
|
||||
""");
|
||||
sql.setParam("emptyName", "\u672a\u586b\u5199");
|
||||
if (canViewAllUnionData()) {
|
||||
sql.setVar("unionFilter", "");
|
||||
} else {
|
||||
sql.setVar("unionFilter", "AND t1.assetUseUnionId = @unionId");
|
||||
sql.setParam("unionId", SecurityUtil.getUnionId());
|
||||
}
|
||||
return listMap(sql);
|
||||
}
|
||||
|
||||
private BigDecimal schoolBudgetTotal(int year) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT IFNULL(SUM(totalQuota), 0) AS total
|
||||
FROM outlay_manage_school
|
||||
WHERE delFlag = 0
|
||||
AND `year` = @year
|
||||
""");
|
||||
sql.setParam("year", year);
|
||||
return firstMap(sql).getAs("total", BigDecimal.class);
|
||||
}
|
||||
|
||||
private long tourCount(int year) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT COUNT(DISTINCT t.id) AS count
|
||||
FROM tour_ledger t
|
||||
LEFT JOIN wf_process_instance ins ON ins.businessNo = t.id
|
||||
WHERE t.delFlag = 0
|
||||
AND t.`year` = @year
|
||||
AND (ins.id IS NULL OR ins.state = @finished)
|
||||
$unionFilter
|
||||
""");
|
||||
sql.setParam("year", year);
|
||||
sql.setParam("finished", FINISHED_STATE);
|
||||
if (canViewAllUnionData()) {
|
||||
sql.setVar("unionFilter", "");
|
||||
} else {
|
||||
sql.setVar("unionFilter", "AND t.unionId = @unionId");
|
||||
sql.setParam("unionId", SecurityUtil.getUnionId());
|
||||
}
|
||||
return firstMap(sql).getLong("count", 0L);
|
||||
}
|
||||
|
||||
private long honorCount(int year) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT COUNT(h.id) AS count
|
||||
FROM honor h
|
||||
WHERE h.delFlag = 0
|
||||
AND YEAR(h.grantDate) = @year
|
||||
$unionFilter
|
||||
""");
|
||||
sql.setParam("year", year);
|
||||
if (canViewAllUnionData()) {
|
||||
sql.setVar("unionFilter", "");
|
||||
} else {
|
||||
sql.setVar("unionFilter", "AND h.unionId = @unionId");
|
||||
sql.setParam("unionId", SecurityUtil.getUnionId());
|
||||
}
|
||||
return firstMap(sql).getLong("count", 0L);
|
||||
}
|
||||
|
||||
private long difficultCount(int year) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT COUNT(DISTINCT info.id) AS count
|
||||
FROM difficult_help_info info
|
||||
INNER JOIN wf_process_instance ins ON ins.businessNo = info.id
|
||||
WHERE info.delFlag = 0
|
||||
AND ins.state = @finished
|
||||
AND YEAR(info.applyTime) = @year
|
||||
$unionFilter
|
||||
""");
|
||||
sql.setParam("year", year);
|
||||
sql.setParam("finished", FINISHED_STATE);
|
||||
if (canViewAllUnionData()) {
|
||||
sql.setVar("unionFilter", "");
|
||||
} else {
|
||||
sql.setVar("unionFilter", "AND info.unionId = @unionId");
|
||||
sql.setParam("unionId", SecurityUtil.getUnionId());
|
||||
}
|
||||
return firstMap(sql).getLong("count", 0L);
|
||||
}
|
||||
|
||||
private BigDecimal reimburseTotal(int year) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
IFNULL(SUM(
|
||||
CASE
|
||||
WHEN info.realMoney IS NOT NULL THEN info.realMoney
|
||||
WHEN info.money IS NOT NULL THEN info.money
|
||||
WHEN info.condolenceMoney IS NOT NULL THEN info.condolenceMoney
|
||||
ELSE 0
|
||||
END
|
||||
), 0) AS total
|
||||
FROM union_reimburse info
|
||||
WHERE info.delFlag = 0
|
||||
AND info.stateId IN (2, 3)
|
||||
AND YEAR(info.createTime) = @year
|
||||
$unionFilter
|
||||
""");
|
||||
sql.setParam("year", year);
|
||||
if (canViewAllUnionData()) {
|
||||
sql.setVar("unionFilter", "");
|
||||
} else {
|
||||
sql.setVar("unionFilter", "AND info.unionId = @unionId");
|
||||
sql.setParam("unionId", SecurityUtil.getUnionId());
|
||||
}
|
||||
return firstMap(sql).getAs("total", BigDecimal.class);
|
||||
}
|
||||
|
||||
private boolean canViewAllUnionData() {
|
||||
return AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name());
|
||||
}
|
||||
|
||||
private NutMap sessionInfo(String sessionId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT id, fullName
|
||||
FROM teacher_congress_session
|
||||
WHERE id = @sessionId
|
||||
""");
|
||||
sql.setParam("sessionId", sessionId);
|
||||
return firstMap(sql);
|
||||
}
|
||||
|
||||
private NutMap overviewData(String sessionId, List<NutMap> caseResults) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
COUNT(info.id) AS total,
|
||||
SUM(CASE WHEN ins.state = @finished THEN 1 ELSE 0 END) AS doneCount
|
||||
FROM proposal_info info
|
||||
LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id
|
||||
WHERE info.sessionId = @sessionId
|
||||
""");
|
||||
sql.setParam("sessionId", sessionId);
|
||||
sql.setParam("finished", FINISHED_STATE);
|
||||
NutMap overview = firstMap(sql);
|
||||
|
||||
long filedCount = 0L;
|
||||
long rejectedCount = 0L;
|
||||
long suggestionCount = 0L;
|
||||
for (NutMap item : caseResults) {
|
||||
String name = item.getString("name", "");
|
||||
long count = item.getLong("count", 0L);
|
||||
if (containsAny(name, "\u4e0d\u4e88", "\u4e0d\u7acb\u6848")) {
|
||||
rejectedCount += count;
|
||||
} else if (containsAny(name, "\u610f\u89c1", "\u5efa\u8bae")) {
|
||||
suggestionCount += count;
|
||||
} else if (name.contains("\u7acb\u6848")) {
|
||||
filedCount += count;
|
||||
}
|
||||
}
|
||||
|
||||
long total = overview.getLong("total", 0L);
|
||||
long doneCount = overview.getLong("doneCount", 0L);
|
||||
long satisfiedCount = satisfiedCount(sessionId);
|
||||
|
||||
return NutMap.NEW()
|
||||
.addv("total", total)
|
||||
.addv("filedCount", filedCount)
|
||||
.addv("suggestionCount", suggestionCount)
|
||||
.addv("rejectedCount", rejectedCount)
|
||||
.addv("doneCount", doneCount)
|
||||
.addv("satisfiedRate", percent(satisfiedCount, doneCount));
|
||||
}
|
||||
|
||||
private List<NutMap> caseResultData(String sessionId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
d.code,
|
||||
d.name,
|
||||
COUNT(info.id) AS count
|
||||
FROM sys_dict parent
|
||||
INNER JOIN sys_dict d ON d.parentId = parent.id AND d.disabled = 0
|
||||
LEFT JOIN proposal_info info ON info.caseFilingResult = d.code AND info.sessionId = @sessionId
|
||||
WHERE parent.code = 'PROPOSAL_CASE_FILING_RESULT'
|
||||
GROUP BY d.id, d.code, d.name, d.location
|
||||
ORDER BY d.location
|
||||
""");
|
||||
sql.setParam("sessionId", sessionId);
|
||||
return listMap(sql);
|
||||
}
|
||||
|
||||
private long satisfiedCount(String sessionId) {
|
||||
List<NutMap> dicts = feedbackDicts();
|
||||
List<NutMap> rows = feedbackRows(sessionId);
|
||||
return dicts.stream()
|
||||
.filter(dict -> {
|
||||
String name = dict.getString("name", "");
|
||||
return name.contains("\u6ee1\u610f") && !name.contains("\u4e0d\u6ee1\u610f");
|
||||
})
|
||||
.mapToLong(dict -> rows.stream()
|
||||
.filter(row -> dict.getString("code", "").equals(row.getString("feedbackCode", "")))
|
||||
.count())
|
||||
.sum();
|
||||
}
|
||||
|
||||
private List<NutMap> feedbackDicts() {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT d.code, d.name
|
||||
FROM sys_dict parent
|
||||
INNER JOIN sys_dict d ON d.parentId = parent.id AND d.disabled = 0
|
||||
WHERE parent.code = 'PROPOSAL_FEEDBACK'
|
||||
ORDER BY d.location
|
||||
""");
|
||||
return listMap(sql);
|
||||
}
|
||||
|
||||
private List<NutMap> feedbackRows(String sessionId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
t.variable
|
||||
FROM proposal_info info
|
||||
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 = 20
|
||||
AND t.taskName = 'feedback'
|
||||
WHERE ins.state = @finished
|
||||
AND info.sessionId = @sessionId
|
||||
GROUP BY info.id, t.variable
|
||||
""");
|
||||
sql.setParam("sessionId", sessionId);
|
||||
sql.setParam("finished", FINISHED_STATE);
|
||||
List<NutMap> rawRows = listMap(sql);
|
||||
List<NutMap> rows = new ArrayList<>();
|
||||
for (NutMap row : rawRows) {
|
||||
String variableStr = row.getString("variable", "");
|
||||
if (StrUtil.isBlank(variableStr)) {
|
||||
continue;
|
||||
}
|
||||
NutMap variable = Json.fromJson(NutMap.class, variableStr);
|
||||
rows.add(NutMap.NEW().addv("feedbackCode", variable.getString("tf_feedback", "")));
|
||||
}
|
||||
return rows;
|
||||
}
|
||||
|
||||
private List<NutMap> listMap(Sql sql) {
|
||||
sql.setCallback(Sqls.callback.maps());
|
||||
dao.execute(sql);
|
||||
return sql.getList(NutMap.class);
|
||||
}
|
||||
|
||||
private NutMap firstMap(Sql sql) {
|
||||
sql.setCallback(Sqls.callback.map());
|
||||
dao.execute(sql);
|
||||
NutMap map = sql.getObject(NutMap.class);
|
||||
return map == null ? NutMap.NEW() : map;
|
||||
}
|
||||
|
||||
private boolean containsAny(String text, String... keywords) {
|
||||
if (StrUtil.isBlank(text)) {
|
||||
return false;
|
||||
}
|
||||
for (String keyword : keywords) {
|
||||
if (text.contains(keyword)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private String percent(long count, long total) {
|
||||
if (total <= 0) {
|
||||
return "0%";
|
||||
}
|
||||
BigDecimal value = BigDecimal.valueOf(count)
|
||||
.multiply(BigDecimal.valueOf(100))
|
||||
.divide(BigDecimal.valueOf(total), 1, RoundingMode.HALF_UP);
|
||||
return value.stripTrailingZeros().toPlainString() + "%";
|
||||
}
|
||||
|
||||
private BigDecimal percentValue(long count, long total) {
|
||||
if (total <= 0) {
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
return BigDecimal.valueOf(count)
|
||||
.multiply(BigDecimal.valueOf(100))
|
||||
.divide(BigDecimal.valueOf(total), 1, RoundingMode.HALF_UP)
|
||||
.stripTrailingZeros();
|
||||
}
|
||||
}
|
||||
+37
@@ -55,6 +55,43 @@ public class HonorManageController {
|
||||
|
||||
}
|
||||
|
||||
@At("/h5")
|
||||
@SaCheckLogin
|
||||
@Ok("beetl:/platform/zhghh5/dayofficework/honor/manage/index.html")
|
||||
public void h5() {
|
||||
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckLogin
|
||||
public Result h5Data(HonorPageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
h.id,
|
||||
h.userName,
|
||||
h.applyUnionName,
|
||||
h.unionName,
|
||||
h.grantDate,
|
||||
h.photoFiles,
|
||||
prize.`name` AS prizeName,
|
||||
type.`name` AS typeName,
|
||||
type.queryTypeCode AS typeQueryTypeCode
|
||||
FROM
|
||||
`honor` h
|
||||
LEFT JOIN honor_basic_settings prize ON prize.id = h.prize
|
||||
LEFT JOIN honor_basic_settings type ON type.id = h.honorType
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
Integer year = pageForm.getYear() == null ? Calendar.getInstance().get(Calendar.YEAR) : pageForm.getYear();
|
||||
cnd.andEX("YEAR(h.grantDate)", "=", year);
|
||||
cnd.andEX("h.honorType", "=", pageForm.getHonorType());
|
||||
cnd.desc("h.grantDate");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = honorViService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("honor.manage")
|
||||
public Result pageData(HonorPageForm pageForm) {
|
||||
|
||||
@@ -222,5 +222,10 @@ public class Honor extends BaseModel {
|
||||
@Comment("附件")
|
||||
private List<JSONObject> files;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
@Comment("荣誉照片")
|
||||
private List<JSONObject> photoFiles;
|
||||
|
||||
private String loginname;
|
||||
}
|
||||
|
||||
+16
-2
@@ -92,8 +92,22 @@ public class CondolenceMineController {
|
||||
condolence info
|
||||
LEFT JOIN condolence_type type ON info.type = type.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
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
id,
|
||||
processInstanceId,
|
||||
taskName,
|
||||
displayName,
|
||||
taskType,
|
||||
performType,
|
||||
taskState,
|
||||
finishTime,
|
||||
taskParentId,
|
||||
variable,
|
||||
ROW_NUMBER() OVER (PARTITION BY processInstanceId ORDER BY createdAt DESC, id DESC) AS rn
|
||||
FROM wf_process_task
|
||||
WHERE taskState = 10
|
||||
) t ON t.processInstanceId = ins.id AND t.rn = 1
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
|
||||
Reference in New Issue
Block a user