This commit is contained in:
=
2025-12-29 08:44:13 +08:00
29 changed files with 373 additions and 291 deletions
@@ -130,7 +130,8 @@ public class ActivityCultureServiceImpl extends BaseServiceImpl<ActivityTissue>
RoleConstant.SCHOOL_UNION_ADMIN.name())) { RoleConstant.SCHOOL_UNION_ADMIN.name())) {
if (AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_ADMIN.name(), RoleConstant.BRANCH_UNION_CHAIRMAN.name())) { if (AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_ADMIN.name(), RoleConstant.BRANCH_UNION_CHAIRMAN.name())) {
group.or("tissue.unionId", "=", SecurityUtil.getUnionId()); group.or("tissue.unionId", "=", SecurityUtil.getUnionId());
} else if (AuthUtil.hasRole(RoleConstant.CLUB_PRESIDENT.name())) { }
if (AuthUtil.hasRole(RoleConstant.CLUB_PRESIDENT.name())) {
List<SysClub> myManageClub = sysClubService.getMyManageClub(); List<SysClub> myManageClub = sysClubService.getMyManageClub();
List<String> clubIds = myManageClub.stream().map(SysClub::getId).collect(Collectors.toList()); List<String> clubIds = myManageClub.stream().map(SysClub::getId).collect(Collectors.toList());
group.or("tissue.clubId", "in", clubIds); group.or("tissue.clubId", "in", clubIds);
@@ -106,6 +106,7 @@ public class ActivityDeclareBranchUnionController {
cnd.and("t.taskName", "=", "54f481d7-3239-4cd2-882d-e1cc18ea86eb"); cnd.and("t.taskName", "=", "54f481d7-3239-4cd2-882d-e1cc18ea86eb");
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
cnd.andEX("info.applyTime", "=", pageParam.getYear());
if (pageParam.getAudit()) { if (pageParam.getAudit()) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
@@ -100,6 +100,7 @@ public class ActivityDeclareClubPrincipalController {
cnd.and("t.taskName", "=", "06d5979b-b52f-4df1-8974-087568322cd6"); cnd.and("t.taskName", "=", "06d5979b-b52f-4df1-8974-087568322cd6");
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
cnd.andEX("info.applyTime", "=", pageParam.getYear());
if (pageParam.getAudit()) { if (pageParam.getAudit()) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
@@ -126,6 +126,7 @@ public class ActivityDeclareMineController {
"""); """);
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
pageParam.buildSearch(cnd, "info."); pageParam.buildSearch(cnd, "info.");
cnd.andEX("info.applyTime", "=", pageParam.getYear());
if (StrUtil.isAllBlank(pageParam.getPageOrderName(), pageParam.getPageOrderBy())) { if (StrUtil.isAllBlank(pageParam.getPageOrderName(), pageParam.getPageOrderBy())) {
cnd.desc("info.applyTime"); cnd.desc("info.applyTime");
} else { } else {
@@ -191,6 +192,9 @@ public class ActivityDeclareMineController {
String activityContent = info.getString("activityContent"); String activityContent = info.getString("activityContent");
info.put("activityContent", sysOfficeTemplateUtil.convertRichTextToDocText(activityContent)); info.put("activityContent", sysOfficeTemplateUtil.convertRichTextToDocText(activityContent));
info.put("applyTime", DateUtil.format(info.getTime("applyTime"), "yyyy-MM-dd"));
info.put("planStartTime", DateUtil.format(info.getTime("planStartTime"), "yyyy年MM月dd日"));
info.put("planEndTime", DateUtil.format(info.getTime("planEndTime"), "yyyy年MM月dd日"));
docData.put("schoolName", Globals.AppName); docData.put("schoolName", Globals.AppName);
docData.put("info", info); docData.put("info", info);
@@ -100,6 +100,7 @@ public class ActivityDeclareSchoolPrincipalController {
cnd.and("t.taskName", "=", "5b511275-143f-4ecd-8eff-7c8ad1456b1b"); cnd.and("t.taskName", "=", "5b511275-143f-4ecd-8eff-7c8ad1456b1b");
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
cnd.andEX("info.applyTime", "=", pageParam.getYear());
if (pageParam.getAudit()) { if (pageParam.getAudit()) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
@@ -97,6 +97,7 @@ public class ActivityDeclareSchoolUnionController {
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
cnd.and("t.taskName", "=", "81428a9b-63c0-44b8-a28c-17d282c2cc8e"); cnd.and("t.taskName", "=", "81428a9b-63c0-44b8-a28c-17d282c2cc8e");
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
cnd.andEX("info.applyTime", "=", pageParam.getYear());
if (pageParam.getAudit()) { if (pageParam.getAudit()) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
@@ -108,7 +108,7 @@ public class ActivityReimbursementBranchUnionController {
cnd.andEX("outlay.budgetReimburseType", "=" , pageParam.getBudgetReimburseType()); cnd.andEX("outlay.budgetReimburseType", "=" , pageParam.getBudgetReimburseType());
cnd.andEX("info.outlayManageSource", "=", pageParam.getOutlayManageSource()); cnd.andEX("info.outlayManageSource", "=", pageParam.getOutlayManageSource());
cnd.andEX("info.activityReimbursementMode", "=", pageParam.getActivityReimbursementMode()); cnd.andEX("info.activityReimbursementMode", "=", pageParam.getActivityReimbursementMode());
cnd.andEX("YEAR(info.applyTime)", "=", pageParam.getYear());
if (pageParam.getAudit()) { if (pageParam.getAudit()) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
} else { } else {
@@ -108,7 +108,7 @@ public class ActivityReimbursementClubPrincipalController {
cnd.andEX("outlay.budgetReimburseType", "=" , pageParam.getBudgetReimburseType()); cnd.andEX("outlay.budgetReimburseType", "=" , pageParam.getBudgetReimburseType());
cnd.andEX("info.outlayManageSource", "=", pageParam.getOutlayManageSource()); cnd.andEX("info.outlayManageSource", "=", pageParam.getOutlayManageSource());
cnd.andEX("info.activityReimbursementMode", "=", pageParam.getActivityReimbursementMode()); cnd.andEX("info.activityReimbursementMode", "=", pageParam.getActivityReimbursementMode());
cnd.andEX("YEAR(info.applyTime)", "=", pageParam.getYear());
if (pageParam.getAudit()) { if (pageParam.getAudit()) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
} else { } else {
@@ -133,6 +133,7 @@ public class ActivityReimbursementMineController {
cnd.and("info.userId", "=", SecurityUtil.getUserId()); cnd.and("info.userId", "=", SecurityUtil.getUserId());
} }
} }
cnd.andEX("YEAR(info.applyTime)", "=", pageParam.getYear());
if (StrUtil.isAllBlank(pageParam.getPageOrderName(), pageParam.getPageOrderBy())) { if (StrUtil.isAllBlank(pageParam.getPageOrderName(), pageParam.getPageOrderBy())) {
cnd.desc("info.applyTime"); cnd.desc("info.applyTime");
} else { } else {
@@ -100,7 +100,7 @@ public class ActivityReimbursementSchoolFinanceController {
cnd.andEX("outlay.budgetReimburseType", "=" , pageParam.getBudgetReimburseType()); cnd.andEX("outlay.budgetReimburseType", "=" , pageParam.getBudgetReimburseType());
cnd.andEX("info.outlayManageSource", "=", pageParam.getOutlayManageSource()); cnd.andEX("info.outlayManageSource", "=", pageParam.getOutlayManageSource());
cnd.andEX("info.activityReimbursementMode", "=", pageParam.getActivityReimbursementMode()); cnd.andEX("info.activityReimbursementMode", "=", pageParam.getActivityReimbursementMode());
cnd.andEX("YEAR(info.applyTime)", "=", pageParam.getYear());
if (pageParam.getAudit()) { if (pageParam.getAudit()) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
} else { } else {
@@ -108,7 +108,7 @@ public class ActivityReimbursementSchoolPrincipalController {
cnd.andEX("outlay.budgetReimburseType", "=" , pageParam.getBudgetReimburseType()); cnd.andEX("outlay.budgetReimburseType", "=" , pageParam.getBudgetReimburseType());
cnd.andEX("info.outlayManageSource", "=", pageParam.getOutlayManageSource()); cnd.andEX("info.outlayManageSource", "=", pageParam.getOutlayManageSource());
cnd.andEX("info.activityReimbursementMode", "=", pageParam.getActivityReimbursementMode()); cnd.andEX("info.activityReimbursementMode", "=", pageParam.getActivityReimbursementMode());
cnd.andEX("YEAR(info.applyTime)", "=", pageParam.getYear());
if (pageParam.getAudit()) { if (pageParam.getAudit()) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
} else { } else {
@@ -124,6 +124,7 @@ public class ActivityReimbursementSchoolUnionController {
cnd.andEX("outlay.budgetReimburseType", "=" , pageParam.getBudgetReimburseType()); cnd.andEX("outlay.budgetReimburseType", "=" , pageParam.getBudgetReimburseType());
cnd.andEX("info.outlayManageSource", "=", pageParam.getOutlayManageSource()); cnd.andEX("info.outlayManageSource", "=", pageParam.getOutlayManageSource());
cnd.andEX("info.activityReimbursementMode", "=", pageParam.getActivityReimbursementMode()); cnd.andEX("info.activityReimbursementMode", "=", pageParam.getActivityReimbursementMode());
cnd.andEX("YEAR(info.applyTime)", "=", pageParam.getYear());
if (pageParam.getAudit()) { if (pageParam.getAudit()) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
@@ -18,6 +18,8 @@ import com.budwk.app.zhgh.activity.sports.param.ActivitySportsApplyUserPageParam
import com.budwk.app.zhgh.activity.sports.service.ActivitySportsApplyUserService; import com.budwk.app.zhgh.activity.sports.service.ActivitySportsApplyUserService;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
import org.nutz.dao.Dao; import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang; import org.nutz.lang.Lang;
@@ -201,10 +203,23 @@ public class H5ActivitySportsApplyUserController {
@At @At
@SaCheckPermission("h5.activity.sports.applyUser") @SaCheckPermission("h5.activity.sports.applyUser")
public Result cancelApply(@Valid String activityId, @Valid String eventId, @Valid String schoolEventId) { public Result cancelApply(@Valid String activityId, @Valid String eventId, @Valid String schoolEventId) {
int count = dao.count(ActivitySchoolApply.class, Sql sql = Sqls.create("""
Cnd.where(ActivitySchoolApply::getUserId, "=", SecurityUtil.getUserId()) SELECT
.and(ActivitySchoolApply::getActivityId, "=", activityId) COUNT(*)
.and(ActivitySchoolApply::getEventId, "=", eventId).and(ActivitySchoolApply::getStatus, "=", 2)); FROM
activity_school_apply asa
LEFT JOIN activity_school act ON act.id = asa.activityId
WHERE
asa.userId = @userId
AND asa.activityId = @activityId
AND asa.eventId = @eventId
AND STATUS = 2
AND JSON_CONTAINS(act.applyWay, '[1,2]')
""")
.setParam("userId", SecurityUtil.getUserId())
.setParam("activityId", activityId)
.setParam("eventId", eventId);
int count = activitySportsApplyUserService.count(sql);
if (count > 0) { if (count > 0) {
return Result.error("您已报名成功无法取消,请联系管理员取消!"); return Result.error("您已报名成功无法取消,请联系管理员取消!");
} }
@@ -177,7 +177,7 @@ public class ClubUserJoinApplyController {
} }
ProcessInstance processInstance = dao.fetch(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "=", userApply.getId())); ProcessInstance processInstance = dao.fetch(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "=", userApply.getId()));
if (!processInstance.getState().equals(ProcessInstanceStateEnum.FINISHED.getCode())) { if (!List.of(ProcessInstanceStateEnum.REJECT.getCode(),ProcessInstanceStateEnum.FINISHED.getCode()).contains(processInstance.getState())) {
return Result.error(99, "您有该协会的申请记录尚未完成,请到我的申请里查看!"); return Result.error(99, "您有该协会的申请记录尚未完成,请到我的申请里查看!");
} }
return Result.success(); return Result.success();
@@ -201,14 +201,14 @@ public class ClubInfoManageController {
int count = dao.count(ClubUser.class, Cnd.where("clubId", "=", clubId) int count = dao.count(ClubUser.class, Cnd.where("clubId", "=", clubId)
.and(new Static("JSON_CONTAINS(roleCode, '\"%s\"')".formatted(RoleConstant.CLUB_PRESIDENT.name())))); .and(new Static("JSON_CONTAINS(roleCode, '\"%s\"')".formatted(RoleConstant.CLUB_PRESIDENT.name()))));
if (count > 0) { if (count > 0) {
return Result.error("会长只能有一位"); // return Result.error("会长只能有一位");
} }
} }
if(Arrays.asList(roleCodes).contains(RoleConstant.CLUB_SECRETARY.name())) { if(Arrays.asList(roleCodes).contains(RoleConstant.CLUB_SECRETARY.name())) {
int count = dao.count(ClubUser.class, Cnd.where("clubId", "=", clubId) int count = dao.count(ClubUser.class, Cnd.where("clubId", "=", clubId)
.and(new Static("JSON_CONTAINS(roleCode, '\"%s\"')".formatted(RoleConstant.CLUB_SECRETARY.name())))); .and(new Static("JSON_CONTAINS(roleCode, '\"%s\"')".formatted(RoleConstant.CLUB_SECRETARY.name()))));
if (count > 0) { if (count > 0) {
return Result.error("秘书长只能有一位"); // return Result.error("秘书长只能有一位");
} }
} }
@@ -70,7 +70,7 @@ public class Asset extends BaseModel implements Serializable {
@Column @Column
@Comment("单价") @Comment("单价")
@ColDefine(customType = "decimal(6,2)") @ColDefine(customType = "decimal(10,2)")
private BigDecimal assetUnitPrice; private BigDecimal assetUnitPrice;
@Column @Column
@@ -43,22 +43,22 @@ public class AssetDepreciationRecord extends BaseModel implements Serializable {
@Column @Column
@Comment("资产全部的价值") @Comment("资产全部的价值")
@ColDefine(customType = "decimal(6,2)") @ColDefine(customType = "decimal(10,2)")
private BigDecimal assetAllMoney; private BigDecimal assetAllMoney;
@Column @Column
@Comment("剩余价值") @Comment("剩余价值")
@ColDefine(customType = "decimal(6,2)") @ColDefine(customType = "decimal(10,2)")
private BigDecimal assetSurplusMoney; private BigDecimal assetSurplusMoney;
@Column @Column
@Comment("累计折旧多少钱") @Comment("累计折旧多少钱")
@ColDefine(customType = "decimal(6,2)") @ColDefine(customType = "decimal(10,2)")
private BigDecimal assetDepreciationMoney; private BigDecimal assetDepreciationMoney;
@Column @Column
@Comment("平均一个月多少钱") @Comment("平均一个月多少钱")
@ColDefine(customType = "decimal(6,2)") @ColDefine(customType = "decimal(10,2)")
private BigDecimal assetAverageMonthMoney; private BigDecimal assetAverageMonthMoney;
@Column @Column
@@ -18,9 +18,11 @@ import com.budwk.app.zhgh.dayofficework.qsv.service.QsvQuizService;
import com.budwk.app.zhgh.dayofficework.qsv.service.QsvUserAnswerRecordService; import com.budwk.app.zhgh.dayofficework.qsv.service.QsvUserAnswerRecordService;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
import org.nutz.dao.Dao; import org.nutz.dao.Dao;
import org.nutz.dao.util.cri.Static; import org.nutz.dao.util.cri.Static;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap; import org.nutz.lang.util.NutMap;
@@ -61,10 +63,11 @@ public class H5QsvQuizController {
@At @At
@SaCheckLogin @SaCheckLogin
@Aop(TransAop.READ_COMMITTED)
public Result subjects(@Valid String activityId) { public Result subjects(@Valid String activityId) {
QsvActivity activity = dao.fetch(QsvActivity.class, activityId); QsvActivity activity = dao.fetch(QsvActivity.class, activityId);
if(activity.getGroupId() != null){ if (activity.getGroupId() != null) {
int count = dao.count(ActivityUserScope.class, Cnd.where("groupId", "=", activity.getGroupId()) int count = dao.count(ActivityUserScope.class, Cnd.where("groupId", "=", activity.getGroupId())
.and("userId", "=", SecurityUtil.getUserId())); .and("userId", "=", SecurityUtil.getUserId()));
if (count != 1) { if (count != 1) {
@@ -102,7 +105,7 @@ public class H5QsvQuizController {
cnd.and(new Static("1=1 ORDER BY FIELD (id," + dynamic + ")")); cnd.and(new Static("1=1 ORDER BY FIELD (id," + dynamic + ")"));
resultSubjects = dao.query(QsvSubject.class, cnd); resultSubjects = dao.query(QsvSubject.class, cnd);
answerRecordId = lastRecordOptional.get().getId(); answerRecordId = lastRecordOptional.get().getId();
}else{ } else {
//没生成过 那就看全部的题目 //没生成过 那就看全部的题目
List<QsvSubject> subjects = dao.query(QsvSubject.class, Cnd.where("activityId", "=", activityId)); List<QsvSubject> subjects = dao.query(QsvSubject.class, Cnd.where("activityId", "=", activityId));
QsvUserAnswerRecord answerRecord = qsvUserAnswerRecordService.insertRecord(activityId, subjects.stream().map(QsvSubject::getId).collect(Collectors.toList())); QsvUserAnswerRecord answerRecord = qsvUserAnswerRecordService.insertRecord(activityId, subjects.stream().map(QsvSubject::getId).collect(Collectors.toList()));
@@ -319,14 +322,14 @@ public class H5QsvQuizController {
return Result.success(result); return Result.success(result);
} }
// 答题记录 // 答题记录
@At @At
public Result answerRecord(@Valid String answerRecordId) { public Result answerRecord(@Valid String answerRecordId) {
QsvUserAnswerRecord record = dao.fetch(QsvUserAnswerRecord.class, answerRecordId); QsvUserAnswerRecord record = dao.fetch(QsvUserAnswerRecord.class, answerRecordId);
return Result.success(record); return Result.success(record);
} }
// 提交答题 // 提交答题
@At @At
@ApiOperation("提交答题") @ApiOperation("提交答题")
@SLog(type = "qsv.quiz", tag = "提交答题", msg = "问卷调查提交答题") @SLog(type = "qsv.quiz", tag = "提交答题", msg = "问卷调查提交答题")
@@ -77,25 +77,25 @@ public class ProposalQueryComprehensiveController {
$condition $condition
"""); """);
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
if(ArrayUtil.isNotEmpty(pageForm.getOrigins())){ if (ArrayUtil.isNotEmpty(pageForm.getOrigins()) && StrUtil.isNotBlank(pageForm.getCommonKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup(); SqlExpressionGroup seg = new SqlExpressionGroup();
// 案名 // 案名
if(ArrayUtil.contains(pageForm.getOrigins(),"name")){ if (ArrayUtil.contains(pageForm.getOrigins(), "name")) {
for (String keyword : pageForm.getCommonKeyword().split(" ")) { for (String keyword : pageForm.getCommonKeyword().split(" ")) {
seg.orLike("info.name", keyword); seg.orLike("info.name", keyword);
} }
} }
// 案由 // 案由
if(ArrayUtil.contains(pageForm.getOrigins(),"brief")){ if (ArrayUtil.contains(pageForm.getOrigins(), "brief")) {
for (String keyword : pageForm.getCommonKeyword().split(" ")) { for (String keyword : pageForm.getCommonKeyword().split(" ")) {
seg.orLike("info.brief", keyword); seg.orLike("info.brief", keyword);
} }
} }
// 提案人 // 提案人
if(ArrayUtil.contains(pageForm.getOrigins(),"createUserName")){ if (ArrayUtil.contains(pageForm.getOrigins(), "createUserName")) {
for (String keyword : pageForm.getCommonKeyword().split(" ")) { for (String keyword : pageForm.getCommonKeyword().split(" ")) {
seg.orLike("info.createUserName", keyword); seg.orLike("info.createUserName", keyword);
seg.orLike("info.createUserLoginName", keyword); seg.orLike("info.createUserLoginName", keyword);
@@ -103,18 +103,18 @@ public class ProposalQueryComprehensiveController {
} }
// 答复内容 // 答复内容
if(ArrayUtil.contains(pageForm.getOrigins(),"answer")){ if (ArrayUtil.contains(pageForm.getOrigins(), "answer")) {
for (String keyword : pageForm.getCommonKeyword().split(" ")) { for (String keyword : pageForm.getCommonKeyword().split(" ")) {
seg.orLike("JSON_EXTRACT(replyTask.variable,'$.tf_opinion')", keyword); seg.orLike("JSON_EXTRACT(replyTask.variable,'$.tf_opinion')", keyword);
} }
} }
if(!seg.isEmpty()){ if (!seg.isEmpty()) {
cnd.and(seg); cnd.and(seg);
} }
} }
if(StrUtil.isNotBlank(pageForm.getUnderTakeUnitId())){ if (StrUtil.isNotBlank(pageForm.getUnderTakeUnitId())) {
cnd.andEX("pru.unitId", "=", pageForm.getUnderTakeUnitId()); cnd.andEX("pru.unitId", "=", pageForm.getUnderTakeUnitId());
} }
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm); ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
@@ -12,6 +12,7 @@ import com.budwk.app.zhgh.democratic.proposal.models.ProposalMerge;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
import org.nutz.dao.Dao; import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang; import org.nutz.lang.Lang;
/** /**
@@ -21,6 +22,7 @@ import org.nutz.lang.Lang;
* @Date 2025/12/22 17:43 * @Date 2025/12/22 17:43
* @注释 提案立案审核撤回监听器 * @注释 提案立案审核撤回监听器
*/ */
@IocBean
public class ProposalCommitteeFilingRevokeEventListener implements ProcessEventListener { public class ProposalCommitteeFilingRevokeEventListener implements ProcessEventListener {
@Inject @Inject
@@ -37,11 +39,11 @@ public class ProposalCommitteeFilingRevokeEventListener implements ProcessEventL
// 处理并案信息撤回 // 处理并案信息撤回
if ("committee".equals(task.getTaskName())) { if ("committee".equals(task.getTaskName())) {
// 如果有并案,删掉并案数据(傻逼提的需求) // 如果有并案,删掉并案数据(傻逼提的需求,nmsl
ProposalMerge proposalMerge = dao.fetch(ProposalMerge.class, Cnd.where("proposalId", "=", processInstance.getBusinessNo())); ProposalMerge proposalMerge = dao.fetch(ProposalMerge.class, Cnd.where("proposalId", "=", processInstance.getBusinessNo()));
if (Lang.isNotEmpty(proposalMerge)) { if (Lang.isNotEmpty(proposalMerge)) {
dao.clear(ProposalMerge.class, Cnd.where(ProposalMerge::getGroupId, "=", proposalMerge.getGroupId())); dao.clear(ProposalMerge.class, Cnd.where(ProposalMerge::getProposalId, "=", proposalMerge.getProposalId()));
} }
} }
} }
@@ -74,7 +74,8 @@ layout("/layouts/platform.html"){
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="申请时间"> <el-descriptions-item label="申请时间">
<el-form-item prop="applyTime"> <el-form-item prop="applyTime">
<el-input disabled type="text" v-model="$moment(formData.applyTime).format('YYYY-MM-DD')"></el-input> <el-input disabled type="text"
v-model="$moment(formData.applyTime).format('YYYY-MM-DD')"></el-input>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
@@ -226,7 +227,7 @@ layout("/layouts/platform.html"){
} }
}, },
watch: { watch: {
'formData.activityType': function(newVal, oldVal) { 'formData.activityType': function (newVal, oldVal) {
if (newVal !== oldVal) { if (newVal !== oldVal) {
this.$set(this.formData, "deductionBudgetId", null) this.$set(this.formData, "deductionBudgetId", null)
this.getBudgetByYear() this.getBudgetByYear()
@@ -277,6 +278,8 @@ layout("/layouts/platform.html"){
// 提交 // 提交
onSubmit() { onSubmit() {
this.$refs.formRef.validate().then((valid) => {
if (valid) {
this.$confirm("您确定要提交吗?", "提示", { this.$confirm("您确定要提交吗?", "提示", {
confirmButtonText: "确定", confirmButtonText: "确定",
cancelButtonText: "取消", cancelButtonText: "取消",
@@ -295,9 +298,13 @@ layout("/layouts/platform.html"){
} }
}) })
}) })
}
})
}, },
onFinishTask() { onFinishTask() {
this.$refs.formRef.validate().then((valid) => {
if (valid) {
this.$confirm("您确定要提交吗?", "提示", { this.$confirm("您确定要提交吗?", "提示", {
confirmButtonText: "确定", confirmButtonText: "确定",
cancelButtonText: "取消", cancelButtonText: "取消",
@@ -317,6 +324,9 @@ layout("/layouts/platform.html"){
} }
}) })
}) })
}
})
}, },
// 设置申报主体名称 // 设置申报主体名称
setDeclareUnitName(val) { setDeclareUnitName(val) {
@@ -28,7 +28,8 @@ layout("/layouts/platform.html"){
<el-descriptions-item label="报销模式"> <el-descriptions-item label="报销模式">
<el-form-item prop="activityReimbursementMode" <el-form-item prop="activityReimbursementMode"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]"> :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-radio-group v-model="formData.activityReimbursementMode" @change="getActivityReimbursementByUser"> <el-radio-group v-model="formData.activityReimbursementMode"
@change="getActivityReimbursementByUser">
<el-radio-button label="activity">活动报销</el-radio-button> <el-radio-button label="activity">活动报销</el-radio-button>
<el-radio-button label="daily">日常报销</el-radio-button> <el-radio-button label="daily">日常报销</el-radio-button>
</el-radio-group> </el-radio-group>
@@ -522,14 +523,14 @@ layout("/layouts/platform.html"){
} }
}) })
} }
if (this.$auth.hasRoleOr(["UNION_REIMBURSEMENT_MANAGER","UNION_REIMBURSEMENT_MANAGER"])) { if (this.$auth.hasRoleOr(["UNION_REIMBURSEMENT_MANAGER", "BRANCH_UNION_CHAIRMAN", "BRANCH_UNION_WENTI_SPORTS"])) {
this.budgetTypeOption.map(v => { this.budgetTypeOption.map(v => {
if (["ACTIVITY_BUDGET_TYPE_TWO"].includes(v.code)) { if (["ACTIVITY_BUDGET_TYPE_TWO"].includes(v.code)) {
budgetTypeCloseOption.push(v) budgetTypeCloseOption.push(v)
} }
}) })
} }
if (this.$auth.hasRoleOr(["CLUB_REIMBURSEMENT_MANAGER","CLUB_PRESIDENT"])) { if (this.$auth.hasRoleOr(["CLUB_REIMBURSEMENT_MANAGER", "CLUB_PRESIDENT"])) {
this.budgetTypeOption.map(v => { this.budgetTypeOption.map(v => {
if (["ACTIVITY_BUDGET_TYPE_THREE"].includes(v.code)) { if (["ACTIVITY_BUDGET_TYPE_THREE"].includes(v.code)) {
budgetTypeCloseOption.push(v) budgetTypeCloseOption.push(v)
@@ -27,14 +27,15 @@ const INFO = {
<el-descriptions-item></el-descriptions-item> <el-descriptions-item></el-descriptions-item>
<template v-if="viewData.activityReimbursementMode==='activity'"> <template v-if="viewData.activityReimbursementMode==='activity'">
<el-descriptions-item label="活动计划时间">{{ (viewData.planStartTime ? viewData.planStartTime : <el-descriptions-item label="活动计划时间">
{{ (viewData.planStartTime ? $moment(viewData.planStartTime).format('YYYY-MM-DD') :
'未填写') '未填写')
+ ' ~ ' + (viewData.planEndTime ? viewData.planEndTime : '未填写') }} + ' ~ ' + (viewData.planEndTime ? $moment(viewData.planEndTime).format('YYYY-MM-DD') : '未填写') }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="活动人数">{{ viewData.activityNumber }}</el-descriptions-item> <el-descriptions-item label="活动人数">{{ viewData.activityNumber }}</el-descriptions-item>
<el-descriptions-item label="实际活动时间" :span="2">{{ (viewData.startTime ? viewData.startTime : <el-descriptions-item label="实际活动时间" :span="2">{{ (viewData.startTime ? $moment(viewData.startTime).format('YYYY-MM-DD') :
'未填写') + ' ~ ' + (viewData.endTime ? viewData.endTime : '未填写') }} '未填写') + ' ~ ' + (viewData.endTime ? $moment(viewData.endTime).format('YYYY-MM-DD') : '未填写') }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="活动地址" :span="2">{{ viewData.activityAddress }} <el-descriptions-item label="活动地址" :span="2">{{ viewData.activityAddress }}
@@ -132,6 +132,7 @@ const CLUB_INFO_MANAGE_TEMPLATE = {
<el-checkbox label="CLUB_SECRETARY">协会秘书长</el-checkbox> <el-checkbox label="CLUB_SECRETARY">协会秘书长</el-checkbox>
<el-checkbox label="CLUB_VICE_SECRETARY">协会副秘书长</el-checkbox> <el-checkbox label="CLUB_VICE_SECRETARY">协会副秘书长</el-checkbox>
<el-checkbox label="CLUB_OPERATOR">协会操作员</el-checkbox> <el-checkbox label="CLUB_OPERATOR">协会操作员</el-checkbox>
<el-checkbox label="CLUB_REIMBURSEMENT_MANAGER">协会报销负责人</el-checkbox>
<el-checkbox label="CLUB_MEMBER">协会会员</el-checkbox> <el-checkbox label="CLUB_MEMBER">协会会员</el-checkbox>
</el-checkbox-group> </el-checkbox-group>
</el-form-item> </el-form-item>
@@ -33,7 +33,7 @@ layout("/layouts/platform.html"){
<el-table-column label="结束时间" prop="endTime" sortable></el-table-column> <el-table-column label="结束时间" prop="endTime" sortable></el-table-column>
<el-table-column label="操作" fixed="right" width="450px"> <el-table-column label="操作" fixed="right" width="450px">
<template scope="{row}"> <template scope="{row}">
<el-button size="mini" type="primary" @click="openQrCode(row.id)">二维码</el-button> <el-button size="mini" type="primary" @click="openQrCode(row)">二维码</el-button>
<el-button size="mini" type="primary" @click="openEdit(row)">编辑</el-button> <el-button size="mini" type="primary" @click="openEdit(row)">编辑</el-button>
<el-button size="mini" type="primary" @click="openSubject(row.id)">题目设置</el-button> <el-button size="mini" type="primary" @click="openSubject(row.id)">题目设置</el-button>
<el-button size="mini" type="danger" @click="onDelete(row.id)">删除</el-button> <el-button size="mini" type="danger" @click="onDelete(row.id)">删除</el-button>
@@ -77,8 +77,13 @@ layout("/layouts/platform.html"){
}, },
// 打开二维码 // 打开二维码
openQrCode(id) { openQrCode(row) {
this.signatureAddress = '?id=' + id const { id,category}=row
if (category==='SURVEY'){
this.signatureAddress = window.location.origin+"/platform/h5/qsv/survey?id=" + id
}else{
this.signatureAddress = window.location.origin+"/platform/h5/qsv/quiz?id=" + id
}
this.$refs.qrCodePlusRef.openDialog() this.$refs.qrCodePlusRef.openDialog()
}, },
@@ -199,6 +199,12 @@ layout("/layouts/platform.html"){
tf_masterUnitId: null, tf_masterUnitId: null,
tf_slaveUnitIds: [] tf_slaveUnitIds: []
}, },
formRules: {
tf_caseFilingResult: [{ required: true, message: "请选择立案结果", trigger: ["blur", "change"] }],
tf_caseFilingType: [{ required: true, message: "请选择立案类型", trigger: ["blur", "change"] }],
tf_masterUnitId: [{ required: true, message: "请选择主办单位", trigger: "blur" }],
approvalOpinion: [{ required: true, message: "请填写审核意见", trigger: "blur" }],
},
showApprovalForm: false, showApprovalForm: false,
sessionOptions: [], sessionOptions: [],
delegationOptions: [], delegationOptions: [],
@@ -92,6 +92,12 @@ const merge = {
tf_masterUnitId: null, tf_masterUnitId: null,
tf_slaveUnitIds: [] tf_slaveUnitIds: []
}, },
formRules: {
tf_caseFilingResult: [{ required: true, message: "请选择立案结果", trigger: ["blur", "change"] }],
tf_caseFilingType: [{ required: true, message: "请选择立案类型", trigger: ["blur", "change"] }],
tf_masterUnitId: [{ required: true, message: "请选择主办单位", trigger: "blur" }],
approvalOpinion: [{ required: true, message: "请填写审核意见", trigger: "blur" }],
},
underTakeOptions: [] underTakeOptions: []
} }
}, },
@@ -123,6 +129,15 @@ const merge = {
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning" type: "warning"
}).then(() => { }).then(() => {
debugger
// 是否有协办单位
let tf_helpunitreply;
if (this.formData.tf_slaveUnitIds && this.formData.tf_slaveUnitIds.length > 0) {
tf_helpunitreply = 'HAS_HELP_UNIT'
} else {
tf_helpunitreply = 'NO_HELP_UNIT'
}
const loading = createLoading('提交中') const loading = createLoading('提交中')
this.$axios.post("/platform/proposal/committeeFiling/merge", { this.$axios.post("/platform/proposal/committeeFiling/merge", {
data: JSON.stringify({ data: JSON.stringify({
@@ -132,6 +147,7 @@ const merge = {
tf_masterUnitName: this.formData.tf_masterUnitId ? this.underTakeOptions.find(v => v.id === this.formData.tf_masterUnitId)?.name : null, tf_masterUnitName: this.formData.tf_masterUnitId ? this.underTakeOptions.find(v => v.id === this.formData.tf_masterUnitId)?.name : null,
tf_slaveUnitNames: this.formData.tf_slaveUnitIds.map(v => this.underTakeOptions.find(v2 => v2.id === v)?.name), tf_slaveUnitNames: this.formData.tf_slaveUnitIds.map(v => this.underTakeOptions.find(v2 => v2.id === v)?.name),
tf_slaveUnitNameStr: this.formData.tf_slaveUnitIds.map(v => this.underTakeOptions.find(v2 => v2.id === v)?.name).join(','), tf_slaveUnitNameStr: this.formData.tf_slaveUnitIds.map(v => this.underTakeOptions.find(v2 => v2.id === v)?.name).join(','),
tf_helpunitreply: tf_helpunitreply
}) })
}).then((res) => { }).then((res) => {
if (res.code === 0) { if (res.code === 0) {
@@ -115,18 +115,19 @@ layout("/layouts/platform.html"){
<!-- ></el-input>--> <!-- ></el-input>-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
<!-- <el-form-item label="调研情况" prop="researchFindings">--> <!-- <el-form-item label="调研情况" prop="researchFindings">-->
<!-- <el-input--> <!-- <el-input-->
<!-- v-model="formData.researchFindings"--> <!-- v-model="formData.researchFindings"-->
<!-- type="textarea"--> <!-- type="textarea"-->
<!-- autosize--> <!-- autosize-->
<!-- :autosize="{ minRows: 4, maxRows: 4}"--> <!-- :autosize="{ minRows: 4, maxRows: 4}"-->
<!-- placeholder="调研情况"--> <!-- placeholder="调研情况"-->
<!-- ></el-input>--> <!-- ></el-input>-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
<el-form-item label="建议承办单位" prop="suggestUnits"> <el-form-item label="建议承办单位" prop="suggestUnits">
<el-select v-model="formData.suggestUnits" multiple filterable style="width: 100%" placeholder="请选择建议承办单位"> <el-select v-model="formData.suggestUnits" multiple filterable style="width: 100%"
placeholder="请选择建议承办单位">
<el-option :key="item.id" :label="item.name" :value="item.name" <el-option :key="item.id" :label="item.name" :value="item.name"
v-for="item in suggestUnitOptions"></el-option> v-for="item in suggestUnitOptions"></el-option>
</el-select> </el-select>
@@ -242,7 +243,9 @@ layout("/layouts/platform.html"){
this.$message.warning("请填写提案名称") this.$message.warning("请填写提案名称")
return return
} }
if (this.formData.brief.length < this.proposalConfig.briefMinLength) { let brief = clone(this.formData.brief)
brief = removeHTMLTag(brief)
if (brief.length < this.proposalConfig.briefMinLength) {
this.$message.warning("提案内容和依据最少为" + this.proposalConfig.briefMinLength + "字") this.$message.warning("提案内容和依据最少为" + this.proposalConfig.briefMinLength + "字")
return return
} }
@@ -257,6 +260,7 @@ layout("/layouts/platform.html"){
loading.close() loading.close()
if (res.code === 0) { if (res.code === 0) {
this.$message.success("提交成功") this.$message.success("提交成功")
if (this.formData.source==="PERSONAL"){
this.$confirm("提交成功,是否立即去邀请附议人?", "提示", { this.$confirm("提交成功,是否立即去邀请附议人?", "提示", {
confirmButtonText: "确定", confirmButtonText: "确定",
cancelButtonText: "取消", cancelButtonText: "取消",
@@ -267,6 +271,10 @@ layout("/layouts/platform.html"){
this.$message.info("请到我的提案界面邀请附议人") this.$message.info("请到我的提案界面邀请附议人")
commonUtil.pjaxPush('/platform/proposal/mine') commonUtil.pjaxPush('/platform/proposal/mine')
}) })
}else{
commonUtil.pjaxPush('/platform/proposal/mine')
}
} }
}) })
}) })
@@ -275,13 +283,16 @@ layout("/layouts/platform.html"){
// 重新提交 // 重新提交
async onSubmitAgain() { async onSubmitAgain() {
const valid = await this.$refs["addForm"].validate() const valid = await this.$refs["addForm"].validate()
if (valid) { if (valid) {
if (!this.formData.name || this.formData.name.trim().length < 1) { if (!this.formData.name || this.formData.name.trim().length < 1) {
this.$message.warning("请填写提案名称") this.$message.warning("请填写提案名称")
return return
} }
if (this.formData.brief.length < this.proposalConfig.briefMinLength) { let brief = clone(this.formData.brief)
brief = removeHTMLTag(brief)
if (brief.length < this.proposalConfig.briefMinLength) {
this.$message.warning("提案内容和依据最少为" + this.proposalConfig.briefMinLength + "字") this.$message.warning("提案内容和依据最少为" + this.proposalConfig.briefMinLength + "字")
return return
} }
@@ -66,7 +66,7 @@ layout("/layouts/platform_h5.html"){
</van-form> </van-form>
<div style="display: flex; justify-content: space-between; column-gap: 10px; padding: 10px"> <div style="display: flex; justify-content: space-between; column-gap: 10px; padding: 10px">
<van-button type="danger" block @click="handleTaskAction(6)">退回</van-button> <van-button type="danger" block @click="handleTaskAction(6)">退回</van-button>
<van-button type="danger" block @click="handleTaskAction(20)">不同意</van-button> <van-button type="danger" block @click="handleTaskAction(2)">不同意</van-button>
<van-button type="primary" block @click="handleTaskAction(1)">同意</van-button> <van-button type="primary" block @click="handleTaskAction(1)">同意</van-button>
</div> </div>
</div> </div>