Merge remote-tracking branch 'origin/main'
This commit is contained in:
+11
@@ -0,0 +1,11 @@
|
||||
package com.budwk.app.zhgh.activity.declarereimbursement.declare.controller;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:ActivityDeclareApplyController
|
||||
* @Date 2025/7/31 15:46
|
||||
* @注释
|
||||
*/
|
||||
public class ActivityDeclareApplyController {
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
package com.budwk.app.zhgh.activity.declarereimbursement.declare.models;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.Table;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:ActivityDeclareInfo
|
||||
* @Date 2025/7/31 15:38
|
||||
* @注释
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class ActivityDeclareInfo extends BaseModel {
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
package com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.controller;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:ActivityReimbursementApplyController
|
||||
* @Date 2025/7/31 15:47
|
||||
* @注释
|
||||
*/
|
||||
public class ActivityReimbursementApplyController {
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
package com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.models;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.Table;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:ActivityReimbursement
|
||||
* @Date 2025/7/31 15:43
|
||||
* @注释
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class ActivityReimbursementInfo extends BaseModel {
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.contants;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 获取活动的树形结构
|
||||
*/
|
||||
@Data
|
||||
public class Cascader {
|
||||
|
||||
private String value;
|
||||
private String label;
|
||||
private List<Cascader> children;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.contants;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum FitnessWalkMode {
|
||||
|
||||
PUNCH("punch", "打卡"),
|
||||
STEP_COUNT("stepCount", "计步"),
|
||||
GPS("gps", "GPS");
|
||||
|
||||
|
||||
private final String value;
|
||||
private final String desc;
|
||||
|
||||
}
|
||||
+133
@@ -0,0 +1,133 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
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.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.fitnesswalk.utils.WeAppCloudUtil;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.json.Json;
|
||||
import org.nutz.lang.Strings;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@IocBean
|
||||
@Ok("json")
|
||||
@ApiOperation("健步走-同步绑定记录")
|
||||
@At("/platform/fitnessWalk/bindingRecord")
|
||||
public class FitnessWalkActivityBindingRecordController {
|
||||
|
||||
@Inject
|
||||
private WeAppCloudUtil weAppCloudUtil;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/activity/fitnesswalk/bindingRecord.html")
|
||||
@SaCheckPermission("fitnessWalk.bindingRecord")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户绑定记录
|
||||
* @param keyWord
|
||||
* @param unionId
|
||||
* @param searchName
|
||||
* @param searchKeyword
|
||||
* @param pageNumber
|
||||
* @param pageSize
|
||||
* @param pageOrderName
|
||||
* @param pageOrderBy
|
||||
* @return
|
||||
* @throws IOException
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("获取用户绑定记录")
|
||||
@SaCheckPermission("fitnessWalk.bindingRecord")
|
||||
public Result pageData(@Param("keyWord") String keyWord,
|
||||
@Param("unionId") String unionId,
|
||||
@Param("searchName") String searchName,
|
||||
@Param("searchKeyword") String searchKeyword,
|
||||
@Param("pageNumber") int pageNumber, @Param("pageSize") int pageSize,
|
||||
@Param("pageOrderName") String pageOrderName,
|
||||
@Param("pageOrderBy") String pageOrderBy) {
|
||||
int skip = (pageNumber == 1 ? 0 : (pageNumber - 1)) * pageSize;
|
||||
|
||||
StringBuilder sql = new StringBuilder("db.collection('login_record')");
|
||||
if (StrUtil.isNotBlank(keyWord)) {
|
||||
sql.append(".where(");
|
||||
sql.append("_.or([");
|
||||
sql.append("{loginname:{$regex:'").append(keyWord).append("',$options:'i'}},");
|
||||
sql.append("{username:{$regex:'").append(keyWord).append("',$options:'i'}}");
|
||||
sql.append("])");
|
||||
sql.append(")");
|
||||
}
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
sql.append(".where({'data.unionid':'").append(SecurityUtil.getUnionId()).append("'})");
|
||||
} else {
|
||||
if (Strings.isNotBlank(unionId)) {
|
||||
sql.append(".where({'data.unionid':'").append(unionId).append("'})");
|
||||
}
|
||||
}
|
||||
sql.append(".field({ data: false })");
|
||||
sql.append(".skip(").append(skip).append(")");
|
||||
sql.append(".limit(").append(pageSize).append(")");
|
||||
sql.append(".get()");
|
||||
|
||||
try {
|
||||
JSONObject jsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.QUERY, sql.toString());
|
||||
List<NutMap> data = jsonObject.getJSONArray("data").stream()
|
||||
.map(v -> JSONUtil.toBean((String) v, NutMap.class))
|
||||
.collect(Collectors.toList());
|
||||
JSONObject pager = jsonObject.getJSONObject("pager");
|
||||
Pagination pagination = new Pagination(pageNumber, pageSize, pager.getInt("Total"), data);
|
||||
return Result.success().addData(pagination);
|
||||
} catch (Exception e) {
|
||||
return Result.error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 删除绑定记录
|
||||
* @param ids
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("删除绑定记录")
|
||||
@SLog(tag = "健步走-同步绑定记录", msg = "删除绑定记录")
|
||||
@SaCheckPermission("fitnessWalk.bindingRecord")
|
||||
public Result delete(String[] ids) {
|
||||
String sql = "db.collection('login_record').where({_id:_.in(" + Json.toJson(ids) + ")}).remove()";
|
||||
weAppCloudUtil.request(WeAppCloudUtil.CRUD.DELETE, sql);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除所有绑定记录
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("删除所有绑定记录")
|
||||
@SLog(tag = "健步走-同步绑定记录", msg = "删除所有绑定记录")
|
||||
@SaCheckPermission("fitnessWalk.bindingRecord")
|
||||
public Result deleteAll() {
|
||||
String sql = "db.collection('login_record').where({_id: _.neq('0')}).remove()";
|
||||
weAppCloudUtil.request(WeAppCloudUtil.CRUD.DELETE, sql);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+337
@@ -0,0 +1,337 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
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.result.Result;
|
||||
import com.budwk.app.sys.models.Sys_task;
|
||||
import com.budwk.app.sys.services.SysTaskService;
|
||||
import com.budwk.app.sys.services.SysUserService;
|
||||
import com.budwk.app.task.services.TaskPlatformService;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkActivity;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkCommonService;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.utils.WeAppCloudUtil;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.json.Json;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.Strings;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.AdaptBy;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
import org.nutz.mvc.upload.TempFile;
|
||||
import org.nutz.mvc.upload.UploadAdaptor;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
@IocBean
|
||||
@Ok("json")
|
||||
@ApiOperation("健步走-活动管理")
|
||||
@At("/platform/fitnessWalk/activityManage")
|
||||
public class FitnessWalkActivityManageController {
|
||||
@Inject
|
||||
private WeAppCloudUtil weAppCloudUtil;
|
||||
@Inject
|
||||
private SysTaskService sysTaskService;
|
||||
@Inject
|
||||
private SysUserService sysUserService;
|
||||
@Inject
|
||||
private TaskPlatformService taskPlatformService;
|
||||
@Inject
|
||||
private FitnessWalkCommonService fitnessWalkCommonService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/activity/fitnesswalk/activityManage.html")
|
||||
@SaCheckPermission("fitnessWalk.activityManage")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("获取活动数据")
|
||||
@SaCheckPermission("fitnessWalk.activityManage")
|
||||
public Result pageData(@Param("year") Integer year, @Param("unionId") String unionId, @Param("searchName") String searchName,
|
||||
@Param("searchKeyword") String searchKeyword, @Param("pageNumber") int pageNumber,
|
||||
@Param("pageSize") int pageSize, @Param("pageOrderName") String pageOrderName,
|
||||
@Param("pageOrderBy") String pageOrderBy) {
|
||||
|
||||
int skip = (pageNumber == 1 ? 0 : (pageNumber - 1)) * pageSize;
|
||||
|
||||
StringBuilder sql = new StringBuilder("db.collection('activity')");
|
||||
if (Strings.isNotBlank(searchName) && Strings.isNotBlank(searchKeyword)) {
|
||||
sql.append("where(");
|
||||
sql.append("_.or([");
|
||||
sql.append("{name:{$regex:'").append(searchKeyword).append("',$options:'i'}}");
|
||||
sql.append("{tag:{$regex:'").append(searchKeyword).append("',$options:'i'}}");
|
||||
sql.append("])");
|
||||
sql.append(")");
|
||||
}
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
sql.append(".where({unionId:'").append(SecurityUtil.getUnionId()).append("'})");
|
||||
} else if (StrUtil.isNotBlank(unionId)) {
|
||||
sql.append(".where({unionId:'").append(unionId).append("'})");
|
||||
}
|
||||
sql.append(".skip(").append(skip).append(")");
|
||||
sql.append(".limit(").append(pageSize).append(")");
|
||||
sql.append(".get()");
|
||||
try {
|
||||
JSONObject jsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.QUERY, sql.toString());
|
||||
List<FitnessWalkActivity> data = jsonObject.getJSONArray("data").stream()
|
||||
.map(v -> JSONUtil.toBean((String) v, FitnessWalkActivity.class))
|
||||
.collect(Collectors.toList());
|
||||
JSONObject pager = jsonObject.getJSONObject("pager");
|
||||
Pagination pagination = new Pagination(pageNumber, pageSize, pager.getInt("Total"), data);
|
||||
return Result.success().addData(pagination);
|
||||
} catch (Exception e) {
|
||||
return Result.error(e.getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("添加活动")
|
||||
@SLog(tag = "健步走-活动管理", msg = "添加活动")
|
||||
@SaCheckPermission("fitnessWalk.activityManage")
|
||||
@AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"})
|
||||
public Result doAdd(@Param("fitnessWalkActivity") FitnessWalkActivity fitnessWalkActivity,
|
||||
@Param("file") TempFile tempFile,
|
||||
@Param("stepFiles") TempFile[] stepFiles,
|
||||
@Param("certificateFile") TempFile certificateTempFile) {
|
||||
try {
|
||||
//设置时间
|
||||
if ("punch".equals(fitnessWalkActivity.getActivityModel())) {
|
||||
fitnessWalkActivity.setApplyStartTime(fitnessWalkActivity.getApplyTime()[0]);
|
||||
fitnessWalkActivity.setApplyEndTime(fitnessWalkActivity.getApplyTime()[1]);
|
||||
}
|
||||
fitnessWalkActivity.setStartTime(fitnessWalkActivity.getTime()[0]);
|
||||
fitnessWalkActivity.setEndTime(fitnessWalkActivity.getTime()[1]);
|
||||
|
||||
if (tempFile != null) {
|
||||
String fileId = weAppCloudUtil.uploadFile("activity/", tempFile.getFile());
|
||||
fitnessWalkActivity.setCover(fileId);
|
||||
}
|
||||
|
||||
if (Lang.isNotEmpty(stepFiles)) {
|
||||
List<String> stepFileIdList = new ArrayList<>();
|
||||
for (TempFile file : stepFiles) {
|
||||
String fileId = weAppCloudUtil.uploadFile("activity/", file.getFile());
|
||||
stepFileIdList.add(fileId);
|
||||
}
|
||||
fitnessWalkActivity.setRandomPics(stepFileIdList);
|
||||
}
|
||||
|
||||
if (certificateTempFile != null) {
|
||||
String fileId = weAppCloudUtil.uploadFile("activity/", certificateTempFile.getFile());
|
||||
fitnessWalkActivity.setCompletionCertificateCover(fileId);
|
||||
}
|
||||
|
||||
if (AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_CHAIRMAN.name(), RoleConstant.BRANCH_UNION_OPERATOR.name(), RoleConstant.BRANCH_UNION_ADMIN.name())
|
||||
&& !AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
fitnessWalkActivity.setUnionId(SecurityUtil.getUnionId());
|
||||
} else {
|
||||
fitnessWalkActivity.setUnionId("");
|
||||
}
|
||||
|
||||
fitnessWalkActivity.setNote(fitnessWalkActivity.getNote().replace("\"", "'"));
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("db.collection('activity').add({data:").append(Json.toJson(fitnessWalkActivity)).append("})");
|
||||
|
||||
try {
|
||||
JSONObject jsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.INSERT, sql.toString());
|
||||
fitnessWalkCommonService.addLotteryTask(fitnessWalkActivity);
|
||||
fitnessWalkCommonService.addOrEditDoSaveRedis(fitnessWalkActivity);
|
||||
return Result.success();
|
||||
} catch (Exception e) {
|
||||
return Result.error(e.getMessage());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return Result.error();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Ok("json:full")
|
||||
@ApiOperation("根据Id获取健步走活动")
|
||||
@SaCheckPermission("fitnessWalk.activityManage")
|
||||
public Result findOne(String id) {
|
||||
return Result.success(fitnessWalkCommonService.getActivity(id));
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("json")
|
||||
@ApiOperation("获取附件")
|
||||
@SaCheckPermission("fitnessWalk.activityManage")
|
||||
public Result getFile(String pic) {
|
||||
try {
|
||||
NutMap res = NutMap.NEW();
|
||||
String imgurl = weAppCloudUtil.httpFile(pic);
|
||||
HashMap<String, Object> imgmap = new HashMap<>();
|
||||
imgmap.put("status", "success");
|
||||
imgmap.put("name", imgurl.substring(imgurl.lastIndexOf("/") + 1));
|
||||
imgmap.put("id", imgurl);
|
||||
imgmap.put("url", imgurl);
|
||||
res.setv("img", imgmap);
|
||||
return Result.success().addData(res);
|
||||
} catch (Exception e) {
|
||||
return Result.error();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("修改健步走活动")
|
||||
@SaCheckPermission("fitnessWalk.activityManage")
|
||||
@AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"})
|
||||
public Result doEdit(@Param("fitnessWalkActivity") FitnessWalkActivity fitnessWalkActivity,
|
||||
@Param("file") TempFile tempFile,
|
||||
@Param("stepFiles") TempFile[] stepFiles,
|
||||
@Param("certificateFile") TempFile certificateTempFile) {
|
||||
//设置时间
|
||||
if ("punch".equals(fitnessWalkActivity.getActivityModel())) {
|
||||
fitnessWalkActivity.setApplyStartTime(fitnessWalkActivity.getApplyTime()[0]);
|
||||
fitnessWalkActivity.setApplyEndTime(fitnessWalkActivity.getApplyTime()[1]);
|
||||
}
|
||||
fitnessWalkActivity.setStartTime(fitnessWalkActivity.getTime()[0]);
|
||||
fitnessWalkActivity.setEndTime(fitnessWalkActivity.getTime()[1]);
|
||||
|
||||
if (tempFile != null) {
|
||||
String fileId = weAppCloudUtil.uploadFile("activity/", tempFile.getFile());
|
||||
fitnessWalkActivity.setCover(fileId);
|
||||
}
|
||||
|
||||
if (Lang.isNotEmpty(stepFiles)) {
|
||||
List<String> stepFileIdList = new ArrayList<>();
|
||||
for (TempFile file : stepFiles) {
|
||||
String fileId = weAppCloudUtil.uploadFile("activity/", file.getFile());
|
||||
stepFileIdList.add(fileId);
|
||||
}
|
||||
fitnessWalkActivity.setRandomPics(stepFileIdList);
|
||||
}
|
||||
|
||||
if (certificateTempFile != null) {
|
||||
String fileId = weAppCloudUtil.uploadFile("activity/", certificateTempFile.getFile());
|
||||
fitnessWalkActivity.setCompletionCertificateCover(fileId);
|
||||
}
|
||||
|
||||
|
||||
if (AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_CHAIRMAN.name(), RoleConstant.BRANCH_UNION_OPERATOR.name(), RoleConstant.BRANCH_UNION_ADMIN.name())
|
||||
&& !AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
fitnessWalkActivity.setUnionId(SecurityUtil.getUnionId());
|
||||
} else {
|
||||
fitnessWalkActivity.setUnionId("");
|
||||
}
|
||||
|
||||
fitnessWalkActivity.setNote(fitnessWalkActivity.getNote().replace("\"", "'"));
|
||||
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("db.collection('activity').doc('")
|
||||
.append(fitnessWalkActivity.get_id())
|
||||
.append("').update({data:").append(Json.toJson(fitnessWalkActivity)).append("})");
|
||||
|
||||
try {
|
||||
JSONObject jsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.UPDATE, sql.toString());
|
||||
fitnessWalkCommonService.addLotteryTask(fitnessWalkActivity);
|
||||
fitnessWalkCommonService.addOrEditDoSaveRedis(fitnessWalkActivity);
|
||||
return Result.success();
|
||||
} catch (Exception e) {
|
||||
return Result.error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("删除健步走活动")
|
||||
@SLog(tag = "健步走-活动管理", msg = "删除活动")
|
||||
@SaCheckPermission("fitnessWalk.activityManage")
|
||||
public Result delete(String id) {
|
||||
try {
|
||||
weAppCloudUtil.request(WeAppCloudUtil.CRUD.DELETE, "db.collection('activity').doc('" + id + "').remove()");
|
||||
weAppCloudUtil.request(WeAppCloudUtil.CRUD.DELETE, "db.collection('register').where({activity_id:'" + id + "'}).remove()");
|
||||
weAppCloudUtil.request(WeAppCloudUtil.CRUD.DELETE, "db.collection('sign').where({activity_id:'" + id + "'}).remove()");
|
||||
weAppCloudUtil.request(WeAppCloudUtil.CRUD.DELETE, "db.collection('gift_voucher').where({activity_id:'" + id + "'}).remove()");
|
||||
|
||||
List<Sys_task> sys_tasks = sysTaskService.query(Cnd.where("note", "=", id));
|
||||
if (sys_tasks != null) {
|
||||
sys_tasks.forEach(v -> {
|
||||
taskPlatformService.delete(v.getId(), v.getId());
|
||||
sysTaskService.delete(v.getId());
|
||||
});
|
||||
|
||||
}
|
||||
return Result.success();
|
||||
} catch (Exception e) {
|
||||
return Result.error();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 健身走健步模式通知提醒
|
||||
*
|
||||
* @param map
|
||||
*/
|
||||
private void addNotifyTask(NutMap map) {
|
||||
if (map.getBoolean("sendNotify")) {
|
||||
String id = map.getString("_id");
|
||||
String name = map.getString("name");
|
||||
String groupId = map.getString("groupId");
|
||||
|
||||
//提醒频率
|
||||
int notifyGap = 10;
|
||||
|
||||
List<Sys_task> sys_tasks = sysTaskService.query(Cnd.where("note", "=", id));
|
||||
if (Lang.isNotEmpty(sys_tasks)) {
|
||||
sys_tasks.forEach(v -> {
|
||||
taskPlatformService.delete(v.getId(), v.getId());
|
||||
sysTaskService.delete(v.getId());
|
||||
});
|
||||
}
|
||||
|
||||
DateTime startTime = DateUtil.date(map.getLong("start_time"));
|
||||
DateTime endTime = DateUtil.date(map.getLong("end_time"));
|
||||
|
||||
Set<DateTime> result = new HashSet<>();
|
||||
DateTime offsetDay = DateUtil.offsetDay(startTime, notifyGap);
|
||||
while (offsetDay.isBefore(endTime) && offsetDay.isAfter(new Date())) {
|
||||
result.add(offsetDay);
|
||||
offsetDay = DateUtil.offsetDay(offsetDay, notifyGap);
|
||||
}
|
||||
//活动结束前一天再添加一个日期提醒
|
||||
result.add(DateUtil.offsetDay(endTime, -1));
|
||||
|
||||
for (DateTime dateTime : result) {
|
||||
Sys_task sys_task = new Sys_task();
|
||||
sys_task.setName(name);
|
||||
sys_task.setNote(id);
|
||||
sys_task.setJobClass("io.v.nutz.task.job.walking.WalkingNotifyJob");
|
||||
sys_task.setData(Json.toJson(Map.of("groupId", groupId)));
|
||||
sys_task.setDisabled(false);
|
||||
|
||||
String dateFormat = "ss mm HH dd MM ? yyyy";
|
||||
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
|
||||
String corn = sdf.format(dateTime);
|
||||
sys_task.setCron(corn);
|
||||
|
||||
sysTaskService.insert(sys_task);
|
||||
|
||||
taskPlatformService.add(sys_task.getId(), sys_task.getId(), sys_task.getJobClass(), sys_task.getCron(), sys_task.getNote(), sys_task.getData());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.controller;
|
||||
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
/**
|
||||
* 健身走公共答题
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/fitnessWalk/common")
|
||||
@Ok("json:full")
|
||||
public class FitnessWalkCommonController {
|
||||
|
||||
// @Inject
|
||||
// private QuestionService questionService;
|
||||
//
|
||||
// @Inject
|
||||
// private QuestionIssueService questionIssueService;
|
||||
//
|
||||
// @Inject
|
||||
// private QuestionWorService questionWorService;
|
||||
//
|
||||
// @Inject
|
||||
// private QuestionReplyService questionReplyService;
|
||||
//
|
||||
// @At
|
||||
// public Object getQuestion() {
|
||||
// return questionService.query(Cnd.where("qflag", "=", 2));
|
||||
// }
|
||||
//
|
||||
// @At
|
||||
// public Object getIssueById(String id) {
|
||||
// List<Question_issue> questionIssues = questionIssueService.query(Cnd.where("iqid", "=", id).asc("ipxbh"));
|
||||
// questionIssues.forEach(issue -> {
|
||||
// issue.setWors(questionWorService.query(Cnd.where("wiid", "=", issue.getIid()).asc("wpxbh")));
|
||||
// });
|
||||
// return questionIssues;
|
||||
// }
|
||||
//
|
||||
// @At
|
||||
// public Object saveAnswer(@Param("reply") Question_reply[] replys) {
|
||||
// for (Question_reply reply : replys) {
|
||||
// reply.setSave(false);
|
||||
// reply.setRidentity(R.UU32());
|
||||
// reply.setRtime(DateUtil.getDate());
|
||||
// questionReplyService.insert(reply);
|
||||
// }
|
||||
// return null;
|
||||
// }
|
||||
|
||||
}
|
||||
+75
@@ -0,0 +1,75 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.controller;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.sys.services.SysUserService;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
/**
|
||||
* @author: Aaron
|
||||
* @create: 2020-09-11 13:50
|
||||
* @description: 小程序登录
|
||||
**/
|
||||
@At("/platform/fitnessWalk/login")
|
||||
@Ok("json:full")
|
||||
@IocBean
|
||||
public class FitnessWalkLoginController {
|
||||
|
||||
@Inject
|
||||
private SysUserService sysUserService;
|
||||
|
||||
@At("/")
|
||||
public Object index(String username, String loginname) {
|
||||
try {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
u.id userid,
|
||||
u.username,
|
||||
u.loginname,
|
||||
u.sex,
|
||||
u.mobile,
|
||||
u.birthday,
|
||||
unit.`name` unitname,
|
||||
u.unitid,
|
||||
u.member,
|
||||
unit.unionid,
|
||||
un.unionname,
|
||||
group_concat(sr.`code`) roles
|
||||
FROM
|
||||
sys_user u
|
||||
LEFT JOIN sys_unit unit ON u.unitid = unit.id
|
||||
LEFT JOIN sys_union un ON unit.unionid = un.id
|
||||
LEFT JOIN sys_user_role sur ON sur.userId = u.id
|
||||
LEFT JOIN sys_role sr ON sr.id = sur.roleId
|
||||
$condition
|
||||
""").setParam("loginname", loginname).setParam("username", username);
|
||||
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("LOWER(u.loginname)", "=", loginname.trim().toLowerCase());
|
||||
cnd.and("LOWER(u.username)", "=", username.trim().toLowerCase());
|
||||
sql.setCondition(cnd);
|
||||
sql.setCallback(Sqls.callback.map());
|
||||
sysUserService.dao().execute(sql);
|
||||
NutMap user = (NutMap) sql.getResult();
|
||||
if (StrUtil.isBlank(user.getString("userid"))) {
|
||||
return Result.error().addMsg("系统查询不到您的信息,请与工会管理员联系!");
|
||||
}
|
||||
// if(user.getInt("member",0)==0){
|
||||
// return Result.error().addMsg("您没有权限参加本次健步行,请与工会管理员联系!");
|
||||
// }
|
||||
/*if (user.getInt("member", 0) != 1 && !user.getString("sex", "").equals("女")) {
|
||||
return Result.error().addMsg("您没有权限参加本次健步行,请与工会管理员联系!");
|
||||
}*/
|
||||
return Result.success().addData(user);
|
||||
} catch (Exception e) {
|
||||
return Result.error();
|
||||
}
|
||||
}
|
||||
}
|
||||
+258
@@ -0,0 +1,258 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.controller;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.sys.models.Sys_user;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkActivity;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkPunchLottery;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkCommonService;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.utils.WeAppCloudUtil;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.integration.jedis.RedisService;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.random.R;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 打卡抽奖
|
||||
*/
|
||||
@IocBean
|
||||
@Ok("json")
|
||||
@ApiOperation("健步走打卡抽奖")
|
||||
@At("/platform/fitnessWalk/punchLottery")
|
||||
public class FitnessWalkPunchLotteryController {
|
||||
|
||||
private final ReentrantLock lock = new ReentrantLock(true);
|
||||
|
||||
@Inject
|
||||
private FitnessWalkCommonService fitnessWalkCommonService;
|
||||
|
||||
@Inject
|
||||
private WeAppCloudUtil weAppCloudUtil;
|
||||
|
||||
@Inject
|
||||
private RedisService redisService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/activity/fitnesswalk/punchLottery.html")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 打卡完成之后抽奖
|
||||
*
|
||||
* @param activityId 活动Id
|
||||
* @param userId 用户Id
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("打卡模式的抽奖")
|
||||
public Result judgeWinningToPunch(String activityId, String userId) {
|
||||
try {
|
||||
if (StrUtil.isBlank(activityId) && StrUtil.isBlank(userId)) {
|
||||
return Result.error("参数错误");
|
||||
}
|
||||
|
||||
lock.lock();
|
||||
int winingCount = fitnessWalkCommonService.dao().count(FitnessWalkPunchLottery.class, Cnd.where("activityId", "=", activityId).and("userId", "=", userId));
|
||||
if (winingCount > 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// 把中奖的用户直接存到redis里面去
|
||||
String redisKey = this.getClass().getName() + "#judgeWinningToPunch#activityid:" + activityId + "#PRIZELIST:";
|
||||
String getPrizeIndexesKey = this.getClass().getName() + "#judgeWinningToPunch#activityid:" + activityId + "#GETPRIZEINDEXES:";
|
||||
|
||||
// redisService.del(getPrizeIndexesKey);
|
||||
// 获取奖品列表
|
||||
List<FitnessWalkActivity.PunchLotteryPrize> punchLotteryPrizes = new ArrayList<>();
|
||||
String punchLotteryPrizesJson = redisService.get(redisKey);
|
||||
if (StrUtil.isNotBlank(punchLotteryPrizesJson)) {
|
||||
punchLotteryPrizes = JSONUtil.toList(punchLotteryPrizesJson, FitnessWalkActivity.PunchLotteryPrize.class);
|
||||
} else {
|
||||
JSONObject prizeJsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.QUERY, "db.collection('activity').doc('%s').field({punchLotteryPrizes: true}).get()".formatted(activityId));
|
||||
List<FitnessWalkActivity.PunchLotteryPrize> prizeList = JSONUtil.parseObj((String) prizeJsonObject.getJSONArray("data").get(0)).getJSONArray("punchLotteryPrizes").toList(FitnessWalkActivity.PunchLotteryPrize.class);
|
||||
redisService.set(redisKey, JSONUtil.toJsonStr(prizeList));
|
||||
punchLotteryPrizes = prizeList;
|
||||
}
|
||||
|
||||
List<Integer> winningUserIndexList = null;
|
||||
//奖项,抽取多少个
|
||||
int sum = punchLotteryPrizes.stream().mapToInt(v -> Integer.parseInt(v.getNum())).sum();
|
||||
//判断是否有key,可以获得奖项的下标数组
|
||||
if (!redisService.exists(getPrizeIndexesKey)) {
|
||||
JSONObject jsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.QUERY, "db.collection('register').where({activity_id:'%s'}).count()".formatted(activityId));
|
||||
JSONObject pager = jsonObject.getJSONObject("pager");
|
||||
String total = pager.getStr("Total");
|
||||
//报名人数的一半,从这里的人中取数(最多抽取人数)
|
||||
Integer lotteryNum = (int) Math.ceil(Double.parseDouble(total) / 2);
|
||||
winningUserIndexList = generateRandomNumber(1, lotteryNum, sum);
|
||||
redisService.set(getPrizeIndexesKey, JSONUtil.toJsonStr(winningUserIndexList));
|
||||
} else {
|
||||
String data = redisService.get(getPrizeIndexesKey);
|
||||
winningUserIndexList = JSONUtil.toList(data, Integer.class);
|
||||
}
|
||||
|
||||
List<FitnessWalkPunchLottery> punchLotteryList = fitnessWalkCommonService.dao().query(FitnessWalkPunchLottery.class, Cnd.where("activityId", "=", activityId));
|
||||
|
||||
Sys_user user = fitnessWalkCommonService.dao().fetch(Sys_user.class, Cnd.where("id", "=", userId));
|
||||
|
||||
FitnessWalkPunchLottery punchLottery = new FitnessWalkPunchLottery();
|
||||
punchLottery.setId(R.UU32());
|
||||
punchLottery.setActivityId(activityId);
|
||||
punchLottery.setUserId(userId);
|
||||
punchLottery.setLoginName(user.getLoginname());
|
||||
punchLottery.setUserName(user.getUsername());
|
||||
punchLottery.setWinDate(new Date());
|
||||
punchLottery.setIsRead(false);
|
||||
punchLottery.setIsWin(false);
|
||||
punchLottery.setIsExchange(false);
|
||||
|
||||
if (winningUserIndexList.contains((punchLotteryList.size()))) {
|
||||
|
||||
//奖项map
|
||||
Map<String, String> prizeMap = punchLotteryPrizes.stream().collect(Collectors.toMap(FitnessWalkActivity.PunchLotteryPrize::getValue, FitnessWalkActivity.PunchLotteryPrize::getName));
|
||||
|
||||
//奖项池
|
||||
List<String> prizeIdList = new ArrayList<>();
|
||||
|
||||
punchLotteryPrizes.forEach(v -> {
|
||||
for (int i = 0; i < Integer.parseInt(v.getNum()); i++) {
|
||||
prizeIdList.add(v.getValue());
|
||||
}
|
||||
});
|
||||
|
||||
//已经中奖的奖项ID集合
|
||||
List<String> winPrizeIdList = punchLotteryList.stream().filter(FitnessWalkPunchLottery::getIsWin).map(FitnessWalkPunchLottery::getPrizeId).toList();
|
||||
winPrizeIdList.forEach(prizeIdList::remove);
|
||||
|
||||
Random random = new Random();
|
||||
if (Lang.isNotEmpty(prizeIdList.size())) {
|
||||
int index = random.nextInt(prizeIdList.size());
|
||||
|
||||
// 获取随机元素
|
||||
String winingPrizeId = prizeIdList.get(index);
|
||||
String winingPrizeName = prizeMap.get(winingPrizeId);
|
||||
punchLottery.setPrizeName(winingPrizeName);
|
||||
punchLottery.setPrizeId(winingPrizeId);
|
||||
punchLottery.setIsWin(true);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fitnessWalkCommonService.dao().insert(punchLottery);
|
||||
if (punchLottery.getIsWin()) {
|
||||
return Result.success().addData(punchLottery.getPrizeId());
|
||||
} else {
|
||||
return Result.success().addData(null);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
} finally {
|
||||
if (lock.isLocked()) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("获取中奖记录")
|
||||
public Result getLotteryRecord(String activityId, String userId) {
|
||||
List<FitnessWalkPunchLottery> list = fitnessWalkCommonService.dao().query(FitnessWalkPunchLottery.class, Cnd.where("activityId", "=", activityId)
|
||||
.and("userId", "=", userId));
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 兑奖
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("兑奖")
|
||||
public Result doExchange(String id) {
|
||||
|
||||
int count = fitnessWalkCommonService.dao().count(FitnessWalkPunchLottery.class, Cnd.where("id", "=", id).and("isExchange", "=", 1));
|
||||
//返回2 "该二维码已兑奖!"
|
||||
if (count > 0) {
|
||||
return Result.success(2);
|
||||
}
|
||||
|
||||
int update = fitnessWalkCommonService.dao().update(FitnessWalkPunchLottery.class,
|
||||
Chain.make("isExchange", 1).add("exchangeDate", new Date()),
|
||||
Cnd.where("id", "=", id));
|
||||
return update > 0 ? Result.success() : Result.error();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 改为已读
|
||||
*
|
||||
* @param activityId
|
||||
* @param userId
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("改为已读")
|
||||
public Result doReadLottery(String activityId, String userId) {
|
||||
fitnessWalkCommonService.dao().update(FitnessWalkPunchLottery.class, Chain.make("isRead", 1),
|
||||
Cnd.where("userId", "=", userId).and("activityId", "=", activityId));
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 查看获奖人员
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("查看获奖人员")
|
||||
public Result getPunchWining(String activityId) {
|
||||
List<FitnessWalkPunchLottery> punchLotteryList = fitnessWalkCommonService.dao().query(FitnessWalkPunchLottery.class,
|
||||
Cnd.where("isWin", "=", 1).and("activityId", "=", activityId));
|
||||
return Result.success(punchLotteryList);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 抽奖方法的工具类,生成随机数,该随机数为中奖人
|
||||
*
|
||||
* @param minNum 最小值
|
||||
* @param maxNum 最多抽取多少人
|
||||
* @param count 抽几个
|
||||
* @return
|
||||
*/
|
||||
public List<Integer> generateRandomNumber(Integer minNum, Integer maxNum, Integer count) {
|
||||
Set<Integer> randomNumbers = new HashSet<>();
|
||||
Random rand = new Random();
|
||||
//如果是 抽奖人数小于了 奖品数量,会陷入死循环
|
||||
if (maxNum <= count) {
|
||||
for (int i = 0; i <= maxNum; i++) {
|
||||
randomNumbers.add(i + 1);
|
||||
}
|
||||
} else {
|
||||
while (randomNumbers.size() < count) {
|
||||
int randomNum = rand.nextInt(maxNum - minNum + 1) + minNum;
|
||||
randomNumbers.add(randomNum);
|
||||
}
|
||||
}
|
||||
return new ArrayList<>(randomNumbers);
|
||||
}
|
||||
}
|
||||
+247
@@ -0,0 +1,247 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.controller;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.json.JSONObject;
|
||||
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.sys.models.Sys_union;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.contants.FitnessWalkMode;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkCommonService;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkPunchStatisticsService;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.utils.WeAppCloudUtil;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* 打卡统计
|
||||
*/
|
||||
@IocBean
|
||||
@Ok("json")
|
||||
@ApiOperation("健步走打卡统计")
|
||||
@At("/platform/fitnessWalk/punchStatistics")
|
||||
public class FitnessWalkPunchStatisticsController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
|
||||
@Inject
|
||||
private FitnessWalkCommonService fitnessWalkCommonService;
|
||||
|
||||
@Inject
|
||||
private WeAppCloudUtil weAppCloudUtil;
|
||||
|
||||
@Inject
|
||||
private FitnessWalkPunchStatisticsService fitnessWalkPunchStatisticsService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/activity/fitnesswalk/punchStatistics.html")
|
||||
@SaCheckPermission("fitnessWalk.punchStatistics")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 分工会统计
|
||||
*
|
||||
* @param activityId
|
||||
* @param unionId
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@Ok("json:full")
|
||||
@ApiOperation("打卡记录统计")
|
||||
@SaCheckPermission("fitnessWalk.punchStatistics")
|
||||
public Result pageData(String activityId, String unionId) {
|
||||
List<NutMap> list = fitnessWalkPunchStatisticsService.unionRegCheckInNum(activityId, unionId);
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("获取活动列表")
|
||||
@SaCheckPermission("fitnessWalk.punchStatistics")
|
||||
public Result getCascadersActivity(@Param("year") int year) {
|
||||
return Result.success().addData(fitnessWalkCommonService.cascaderActivity(year, FitnessWalkMode.PUNCH));
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("json:full")
|
||||
@ApiOperation("根据工会查询获取报名人员")
|
||||
@SaCheckPermission("fitnessWalk.punchStatistics")
|
||||
public Result unionRegistrationData(String activityId, String unionId) {
|
||||
List<JSONObject> list = fitnessWalkPunchStatisticsService.unionRegistrationData(activityId, unionId);
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("json:full")
|
||||
@ApiOperation("根据工会查询获取打卡人员")
|
||||
@SaCheckPermission("fitnessWalk.punchStatistics")
|
||||
public Result unionCheckInData(String activityId, String unionId) {
|
||||
List<JSONObject> list = fitnessWalkPunchStatisticsService.unionCheckInData(activityId, unionId);
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("导出各分工会报名人数、打卡人数")
|
||||
@SaCheckPermission("fitnessWalk.punchStatistics")
|
||||
public void exportUnionRegCheckInNum(HttpServletResponse response, String activityId) {
|
||||
List<NutMap> list = fitnessWalkPunchStatisticsService.unionRegCheckInNum(activityId, null);
|
||||
List<ExcelExportEntity> entities = new ArrayList<>();
|
||||
entities.add(new ExcelExportEntity("分工会", "unionname", 20));
|
||||
entities.add(new ExcelExportEntity("报名人数", "regCount", 20));
|
||||
entities.add(new ExcelExportEntity("打卡人数", "checkInCount", 20));
|
||||
|
||||
try {
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), entities, list);
|
||||
workbook.write(response.getOutputStream());
|
||||
|
||||
CommonDownloadUtil.download("各分工会统计人数.xlsx", workbook, response);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("导出某个分工会的报名人员")
|
||||
@SaCheckPermission("fitnessWalk.punchStatistics")
|
||||
public void exportRegUsers(HttpServletResponse response, String activityId, String unionId) {
|
||||
Sys_union union = dao.fetch(Sys_union.class, unionId);
|
||||
String unionName = Optional.ofNullable(union).map(Sys_union::getName).orElse(null);
|
||||
|
||||
List<JSONObject> list = fitnessWalkPunchStatisticsService.unionRegistrationData(activityId, unionId);
|
||||
List<ExcelExportEntity> entities = new ArrayList<>();
|
||||
entities.add(new ExcelExportEntity("工号", "loginname", 20));
|
||||
entities.add(new ExcelExportEntity("姓名", "username", 20));
|
||||
entities.add(new ExcelExportEntity("单位", "unitname", 20));
|
||||
entities.add(new ExcelExportEntity("手机号", "mobile", 20));
|
||||
entities.add(new ExcelExportEntity("报名时间", "register_time_str", 20));
|
||||
|
||||
try {
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), entities, list);
|
||||
workbook.write(response.getOutputStream());
|
||||
CommonDownloadUtil.download("分工会报名人员.xlsx", workbook, response);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("导出某个分工会的打卡人员")
|
||||
@SaCheckPermission("fitnessWalk.punchStatistics")
|
||||
public void exportCheckInUsers(HttpServletResponse response, String activityId, String unionId) {
|
||||
Sys_union union = dao.fetch(Sys_union.class, unionId);
|
||||
String unionName = Optional.ofNullable(union).map(Sys_union::getName).orElse(null);
|
||||
|
||||
List<JSONObject> list = fitnessWalkPunchStatisticsService.unionCheckInData(activityId, unionId);
|
||||
|
||||
for (JSONObject jsonObject : list) {
|
||||
Boolean used = jsonObject.getBool("used");
|
||||
if (used == null) {
|
||||
jsonObject.put("used", "未取得");
|
||||
} else if (used) {
|
||||
jsonObject.put("used", "已领取");
|
||||
} else {
|
||||
jsonObject.put("used", "未领取");
|
||||
}
|
||||
}
|
||||
|
||||
List<ExcelExportEntity> entities = new ArrayList<>();
|
||||
entities.add(new ExcelExportEntity("工号", "loginname", 20));
|
||||
entities.add(new ExcelExportEntity("姓名", "username", 20));
|
||||
entities.add(new ExcelExportEntity("单位", "unitname", 20));
|
||||
entities.add(new ExcelExportEntity("手机号", "mobile", 20));
|
||||
entities.add(new ExcelExportEntity("点位总数", "pts_size", 20));
|
||||
entities.add(new ExcelExportEntity("已打卡点位数", "sign_size", 20));
|
||||
entities.add(new ExcelExportEntity("礼品券", "used", 20));
|
||||
|
||||
try {
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), entities, list);
|
||||
workbook.write(response.getOutputStream());
|
||||
CommonDownloadUtil.download(unionName + "分工会报名人员.xlsx", workbook, response);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
// /**
|
||||
// * 导出礼品领取情况
|
||||
// * @param response
|
||||
// * @param activityId
|
||||
// * @param unionId 工会id
|
||||
// * @param used
|
||||
// */
|
||||
// @At
|
||||
// @Ok("void")
|
||||
// public void exportGiftInfo(HttpServletResponse response, String activityId, String unionId, boolean used) {
|
||||
//
|
||||
//
|
||||
//
|
||||
// }
|
||||
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("导出未领取得奖品券用户")
|
||||
@SaCheckPermission("fitnessWalk.punchStatistics")
|
||||
public void exportNotGetGiftVoucherUsers(HttpServletResponse response, String activityId) {
|
||||
List<JSONObject> list = fitnessWalkPunchStatisticsService.exportNotGetGiftVoucherUsers(activityId);
|
||||
List<ExcelExportEntity> entities = new ArrayList<>();
|
||||
entities.add(new ExcelExportEntity("工号", "loginname", 20));
|
||||
entities.add(new ExcelExportEntity("姓名", "username", 20));
|
||||
entities.add(new ExcelExportEntity("单位", "unitname", 20));
|
||||
entities.add(new ExcelExportEntity("手机号", "mobile", 20));
|
||||
try {
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), entities, list);
|
||||
workbook.write(response.getOutputStream());
|
||||
CommonDownloadUtil.download("未领取得奖品券人员.xlsx", workbook, response);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("导出未使用奖品券用户")
|
||||
@SaCheckPermission("fitnessWalk.punchStatistics")
|
||||
public void exportNotUseGiftVoucherUsers(HttpServletResponse response, String activityId) {
|
||||
List<JSONObject> list = fitnessWalkPunchStatisticsService.exportNotUseGiftVoucherUsers(activityId);
|
||||
List<ExcelExportEntity> entities = new ArrayList<>();
|
||||
entities.add(new ExcelExportEntity("工号", "loginname", 20));
|
||||
entities.add(new ExcelExportEntity("姓名", "username", 20));
|
||||
entities.add(new ExcelExportEntity("单位", "unitname", 20));
|
||||
entities.add(new ExcelExportEntity("手机号", "mobile", 20));
|
||||
try {
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), entities, list);
|
||||
workbook.write(response.getOutputStream());
|
||||
CommonDownloadUtil.download("导出未使用礼品券用户.xlsx", workbook, response);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+403
@@ -0,0 +1,403 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.controller;
|
||||
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUnit;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkActivity;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkStep;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkCommonService;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.utils.WeAppCloudUtil;
|
||||
import com.budwk.app.zhgh.integral.model.IntegralDetail;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.integration.jedis.RedisService;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.json.Json;
|
||||
import org.nutz.lang.Lang;
|
||||
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.text.DecimalFormat;
|
||||
import java.util.*;
|
||||
import java.util.function.BinaryOperator;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@IocBean
|
||||
@Ok("json")
|
||||
@ApiOperation("健步走步数管理")
|
||||
@At("/platform/fitnessWalk/stepManage")
|
||||
public class FitnessWalkStepManageController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
@Inject
|
||||
private RedisService redisService;
|
||||
@Inject
|
||||
private WeAppCloudUtil weAppCloudUtil;
|
||||
@Inject
|
||||
private FitnessWalkCommonService fitnessWalkCommonService;
|
||||
|
||||
|
||||
/**
|
||||
* 用户上传一个近31天的步数
|
||||
*
|
||||
* @param activityId 活动id
|
||||
* @param userId 用户id
|
||||
* @param monthSteps 步数(当天往前推30天)
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@Ok("json:full")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "健步走步数管理", msg = "微信步数上传")
|
||||
@ApiOperation("上传微信步数,再根据是否开启了积分,自动将步数转化成积分")
|
||||
public Result updateStepMonth(String activityId, String userId, String monthSteps) {
|
||||
try {
|
||||
if (StrUtil.isBlank(userId) || StrUtil.isBlank(monthSteps) || StrUtil.isBlank(activityId)) {
|
||||
return Result.error("必要参数未传递");
|
||||
}
|
||||
|
||||
// 健步走的活动数据
|
||||
FitnessWalkActivity activity = fitnessWalkCommonService.getActivity(activityId);
|
||||
// 是否启用了积分
|
||||
boolean isPoints = activity.getIsPoints() != null && activity.getIsPoints();
|
||||
|
||||
// 使用对象解构获取活动参数
|
||||
final Integer standSteps = activity.getLotteryQualificationSteps();
|
||||
final Integer standPoints = activity.getLotteryQualificationPoints();
|
||||
final Integer otherSteps = activity.getOtherSteps();
|
||||
final Integer otherPoints = activity.getOtherPoints();
|
||||
final Integer maxPoints = activity.getMaxPoints();
|
||||
|
||||
String integralNotes = activity.getMasterActivityName() + "所获积分";
|
||||
|
||||
// 获取到的用户的步数数据
|
||||
List<NutMap> steps = Json.fromJsonAsList(NutMap.class, monthSteps);
|
||||
|
||||
//判断数据是否完整 微信运动会在晚上10点多进行步数的更新 会导致31天前的步数获取变为0 所以这里去除掉第一个元素 即为31天前的数据 每次只保存最近30天的数据
|
||||
if (Lang.isNotEmpty(steps) && steps.size() == 31) {
|
||||
steps.remove(0);
|
||||
}
|
||||
|
||||
// 传递过来的步数数据
|
||||
List<FitnessWalkStep> wxSteps = steps.stream().map(v -> {
|
||||
FitnessWalkStep step = new FitnessWalkStep();
|
||||
step.setActivityId(activityId);
|
||||
step.setUserId(userId);
|
||||
step.setStep(v.getInt("step"));
|
||||
// 计算积分,判断有没有设置,超过达标步数后,每达标XX步数,获得XX积分
|
||||
int calculatedPoints = calculatePoints(isPoints, standSteps, standPoints, otherSteps, otherPoints, maxPoints, step.getStep());
|
||||
step.setPoints(calculatedPoints);
|
||||
DateTime date = DateUtil.parse(DateUtil.format(DateUtil.date(v.getLong("timestamp") * 1000), "yyyy-MM-dd"), "yyyy-MM-dd");
|
||||
step.setApplyDate(date);
|
||||
return step;
|
||||
}).toList();
|
||||
|
||||
// 传递过来的所有日期的集合
|
||||
List<Date> dateList = wxSteps.stream().map(FitnessWalkStep::getApplyDate).collect(Collectors.toList());
|
||||
|
||||
// 去数据库查询日期,这个玩意还要保证插入到数据库的单个日期只有一条,并且这个日期数据库之前有步数,传过来没步数那就要保留数据库的步数
|
||||
// 上面日期集合数据库的步数
|
||||
List<FitnessWalkStep> stepList = dao.query(FitnessWalkStep.class, Cnd.where("activityId", "=", activityId)
|
||||
.and("userId", "=", userId).and("applyDate", "in", dateList));
|
||||
|
||||
// 这就是保留每天最大步数的集合,那这个集合里面applyDate就是唯一的了
|
||||
List<FitnessWalkStep> dupStepList = new ArrayList<>(stepList.stream()
|
||||
.collect(Collectors.toMap(FitnessWalkStep::getApplyDate, Function.identity(),
|
||||
BinaryOperator.maxBy(Comparator.comparing(FitnessWalkStep::getStep))))
|
||||
.values());
|
||||
|
||||
// 这是过滤的相同的applyDate的集合,这些数据要删除
|
||||
List<String> delStepIds = stepList.stream()
|
||||
.filter(step -> !dupStepList.contains(step))
|
||||
.map(FitnessWalkStep::getId)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 数据库的数据 这个map就用于判断数据库的日期和传递过来日期的步数,两个是不是相等的,保留步数多的数据
|
||||
Map<Date, FitnessWalkStep> dateStepMap = dupStepList.stream().collect(Collectors.toMap(FitnessWalkStep::getApplyDate, v -> v));
|
||||
|
||||
List<FitnessWalkStep> resultStepList = new ArrayList<>();
|
||||
// 这里循环就是,循环的传递过来的数据
|
||||
for (FitnessWalkStep step : wxSteps) {
|
||||
// 数据库存储的步数
|
||||
FitnessWalkStep walkStep = dateStepMap.get(step.getApplyDate());
|
||||
// 如果数据库没有,那就要新增
|
||||
if (Lang.isEmpty(walkStep)) {
|
||||
resultStepList.add(step);
|
||||
} else {
|
||||
// 如果数据库有,那就要保留步数多的
|
||||
if (walkStep.getStep() < step.getStep()) {
|
||||
walkStep.setStep(step.getStep());
|
||||
resultStepList.add(walkStep);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 最后删除重复日期,更新步数数据
|
||||
if (Lang.isNotEmpty(delStepIds)) {
|
||||
dao.clear(FitnessWalkStep.class, Cnd.where("id", "in", delStepIds));
|
||||
if (standSteps != null && standSteps > 0) {
|
||||
// 删除积分明细
|
||||
dao.clear(IntegralDetail.class, Cnd.where("id", "in", delStepIds));
|
||||
}
|
||||
}
|
||||
if (Lang.isNotEmpty(resultStepList)) {
|
||||
dao.insertOrUpdate(resultStepList);
|
||||
if (standSteps != null && standSteps > 0) {
|
||||
// 增加积分明细
|
||||
int year = DateUtil.thisYear();
|
||||
List<IntegralDetail> integralDetailList = resultStepList.stream().map(v -> {
|
||||
IntegralDetail detail = new IntegralDetail();
|
||||
detail.setId(v.getId());
|
||||
detail.setYear(String.valueOf(year));
|
||||
detail.setUserId(userId);
|
||||
detail.setIntegral(String.valueOf(v.getPoints()));
|
||||
detail.setIntegralNotes(integralNotes);
|
||||
detail.setBizId(activityId);
|
||||
detail.setIntegralTime(v.getApplyDate());
|
||||
return detail;
|
||||
}).toList();
|
||||
|
||||
List<IntegralDetail> list = integralDetailList.stream().filter(v -> !"0".equals(v.getIntegral())).toList();
|
||||
if (Lang.isNotEmpty(list)) {
|
||||
dao.insertOrUpdate(list);
|
||||
}
|
||||
}
|
||||
}
|
||||
return Result.success();
|
||||
} catch (Exception e){
|
||||
e.printStackTrace();
|
||||
return Result.error("步数上传失败,请稍后重试,必要时请及时联系管理员");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 小程序获取开始时间至今的步数
|
||||
*
|
||||
* @param activityId
|
||||
* @param userId
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@Ok("json:full")
|
||||
@ApiOperation("小程序获取开始时间至今的步数")
|
||||
public Result getActivityDateStep(String activityId, String userId) {
|
||||
try {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
|
||||
FitnessWalkActivity activity = fitnessWalkCommonService.getActivity(activityId);
|
||||
DateTime startTime = DateUtil.date(activity.getStartTime());
|
||||
DateTime endTime = DateUtil.date(activity.getEndTime());
|
||||
|
||||
cnd.and("activityId", "=", activityId);
|
||||
cnd.and("userId", "=", userId);
|
||||
cnd.and("applyDate", ">=", startTime);
|
||||
cnd.and("applyDate", "<=", endTime);
|
||||
cnd.asc("applyDate");
|
||||
cnd.groupBy("applyDate");
|
||||
List<FitnessWalkStep> stepList = baseService.dao().query(FitnessWalkStep.class, cnd);
|
||||
|
||||
List<Map<String, ? extends Number>> collect = stepList.stream().map(v -> {
|
||||
return Map.of("step", v.getStep(), "timestamp", v.getApplyDate().getTime());
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
return Result.success().addData(collect);
|
||||
|
||||
} catch (Exception e) {
|
||||
return Result.error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("json:full")
|
||||
@ApiOperation("获取活动达标的进度条")
|
||||
public Result getActivityQualifyProgressBar(String activityId, String userId) {
|
||||
NutMap resultMap = NutMap.NEW();
|
||||
|
||||
FitnessWalkActivity activity = fitnessWalkCommonService.getActivity(activityId);
|
||||
//计步的抽奖模式 everyday custom
|
||||
String lotteryMode = activity.getLotteryMode();
|
||||
if ("everyday".equals(lotteryMode)) {
|
||||
FitnessWalkActivity.DayLotteryRule dayLotteryRule = activity.getDayLotteryRule();
|
||||
//每日抽奖资格步数
|
||||
Integer lotteryQualificationStep = dayLotteryRule.getLotteryQualificationStep();
|
||||
|
||||
FitnessWalkStep userWalkStep = baseService.dao().fetch(FitnessWalkStep.class, Cnd.where("userId", "=", userId)
|
||||
.and("DATE( applyDate )", "=", DateUtil.today()).and("activityId", "=", activityId));
|
||||
|
||||
int complianceDay = baseService.dao().count(FitnessWalkStep.class, Cnd.where("userId", "=", userId)
|
||||
.and("DATE( applyDate )", "=", DateUtil.today()).and("activityId", "=", activityId)
|
||||
.and("step", ">", lotteryQualificationStep));
|
||||
|
||||
// 今天的步数
|
||||
Integer thisDayStep = userWalkStep.getStep();
|
||||
|
||||
// 去计算达标的百分比
|
||||
BigDecimal lotteryQualificationStepBig = new BigDecimal(lotteryQualificationStep);
|
||||
BigDecimal thisDayStepBig = new BigDecimal(thisDayStep);
|
||||
//达标的小数,保留四位
|
||||
BigDecimal divide = thisDayStepBig.divide(lotteryQualificationStepBig, 4, RoundingMode.HALF_UP);
|
||||
BigDecimal percentValue = divide.multiply(new BigDecimal("100"));
|
||||
// 格式化为两位小数
|
||||
DecimalFormat decimalFormat = new DecimalFormat("#.##");
|
||||
//百分数
|
||||
String formattedPercent = decimalFormat.format(percentValue);
|
||||
|
||||
long betweenDay = DateUtil.date(activity.getStartTime()).between(DateUtil.date(activity.getEndTime()), DateUnit.DAY);
|
||||
NutMap map = new NutMap();
|
||||
map.setv("mode", "everyDayLottery");
|
||||
//当前达标步数
|
||||
map.setv("userStep", thisDayStep);
|
||||
//达标总步数
|
||||
map.setv("complianceSumStep", lotteryQualificationStep);
|
||||
//达标比例
|
||||
map.setv("complianceProportion", Integer.parseInt(formattedPercent));
|
||||
//活动天数
|
||||
map.setv("betweenDay", betweenDay);
|
||||
//达标天数
|
||||
map.setv("complianceDay", complianceDay);
|
||||
resultMap.addv("everyDayLotteryMode", map);
|
||||
} else if ("custom".equals(lotteryMode)) {
|
||||
List<FitnessWalkActivity.CustomLotteryRule> customLotteryRules = activity.getCustomLotteryRules();
|
||||
List<FitnessWalkStep> userWalkSteps = baseService.dao().
|
||||
query(FitnessWalkStep.class, Cnd.where("userId", "=", userId)
|
||||
.and("activityId", "=", activityId)
|
||||
.and("DATE(applyDate)", ">=", DateUtil.format(DateUtil.date(activity.getStartTime()), "yyyy-MM-dd"))
|
||||
.and("DATE(applyDate)", "<=", DateUtil.format(DateUtil.date(activity.getEndTime()), "yyyy-MM-dd"))
|
||||
);
|
||||
|
||||
List<NutMap> result = new ArrayList<>();
|
||||
|
||||
for (FitnessWalkActivity.CustomLotteryRule rule : customLotteryRules) {
|
||||
NutMap nutMap = NutMap.NEW();
|
||||
|
||||
List<FitnessWalkStep> partSteps = userWalkSteps.stream()
|
||||
.filter(s -> (DateUtil.compare(s.getApplyDate(), rule.getStartDate()) >= 0 && DateUtil.compare(s.getApplyDate(), rule.getEndDate()) <= 0))
|
||||
.toList();
|
||||
|
||||
Integer lotteryQualificationDay = rule.getLotteryQualificationDay();
|
||||
Integer lotteryQualificationStep = rule.getLotteryQualificationStep();
|
||||
|
||||
if (lotteryQualificationDay != null && lotteryQualificationStep != null) {
|
||||
//每天步数
|
||||
nutMap.put("mode", "customLotteryEveryDayStepMode");
|
||||
//用户总达标步数
|
||||
nutMap.put("userSumStep", partSteps.stream().filter(s -> DateUtil.compare(s.getApplyDate(), new Date(), "yyyy-MM-dd") == 0).findFirst().map(s -> s.getStep()).orElse(0));
|
||||
//今天达标步数
|
||||
nutMap.put("complianceStep", lotteryQualificationStep);
|
||||
//总达标步数
|
||||
nutMap.put("complianceSumStep", lotteryQualificationDay * lotteryQualificationStep);
|
||||
//用户当前达标总天数
|
||||
nutMap.put("userComplianceSumDay", partSteps.stream().filter(s -> s.getStep() > lotteryQualificationStep).count());
|
||||
//总达标天数
|
||||
nutMap.put("complianceSumDay", lotteryQualificationDay);
|
||||
} else if (lotteryQualificationDay == null && lotteryQualificationStep != null) {
|
||||
//总步数
|
||||
nutMap.put("mode", "customLotterySumStepMode");
|
||||
//用户总达标步数
|
||||
nutMap.put("userSumStep", partSteps.stream().mapToInt(FitnessWalkStep::getStep).sum());
|
||||
//总达标步数
|
||||
nutMap.put("complianceSumStep", lotteryQualificationStep);
|
||||
|
||||
nutMap.put("title", DateUtil.format(rule.getStartDate(), "MM月dd日") + "至" + DateUtil.format(rule.getEndDate(), "MM月dd日"));
|
||||
|
||||
}
|
||||
result.add(nutMap);
|
||||
}
|
||||
resultMap.addv("customLotteryMode", result);
|
||||
}
|
||||
return Result.success().addData(resultMap);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户未读的奖
|
||||
*
|
||||
* @param activityId
|
||||
* @param userId
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@Ok("json:full")
|
||||
@ApiOperation("获取用户未读的奖")
|
||||
public Result winningRecord(String activityId, String userId) {
|
||||
Sql sql = Sqls.create("""
|
||||
select awardName,startDate,endDate from fitness_walk_award_user where activityId=@activityId and userId=@userId and isRead=@isRead
|
||||
""").setParam("activityId",activityId).setParam("userId", userId).setParam("isRead",true);
|
||||
|
||||
/* List<FitnessWalkAwardUser> awardUsers = baseService.dao().query(FitnessWalkAwardUser.class,
|
||||
Cnd.where("activityId", "=", activityId)
|
||||
.and("userId", "=", userId).and("isRead", "=", true));*/
|
||||
return Result.success(baseService.listMap(sql));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 计算积分
|
||||
* @param isPointsEnabled
|
||||
* @param standSteps
|
||||
* @param standPoints
|
||||
* @param otherSteps
|
||||
* @param otherPoints
|
||||
* @param maxPoints
|
||||
* @param actualSteps
|
||||
* @return
|
||||
*/
|
||||
private int calculatePoints(boolean isPointsEnabled,
|
||||
Integer standSteps, Integer standPoints,
|
||||
Integer otherSteps, Integer otherPoints,
|
||||
Integer maxPoints, int actualSteps) {
|
||||
// 基础条件检查
|
||||
if (!isPointsEnabled || standSteps == null || standPoints == null || actualSteps < standSteps) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 计算基础积分
|
||||
int totalPoints = standPoints;
|
||||
|
||||
// 计算额外积分
|
||||
if (hasExtraPoints(otherSteps, otherPoints)) {
|
||||
int extraSteps = actualSteps - standSteps;
|
||||
int extraPoints = (extraSteps / otherSteps) * otherPoints;
|
||||
totalPoints += extraPoints;
|
||||
}
|
||||
|
||||
// 应用积分上限
|
||||
if (hasMaxPointsLimit(maxPoints)) {
|
||||
return Math.min(totalPoints, maxPoints);
|
||||
}
|
||||
|
||||
return totalPoints;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查是否有额外积分规则
|
||||
*/
|
||||
private boolean hasExtraPoints(Integer otherSteps, Integer otherPoints) {
|
||||
return otherSteps != null && otherPoints != null && otherSteps > 0 && otherPoints > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查是否有积分上限
|
||||
*/
|
||||
private boolean hasMaxPointsLimit(Integer maxPoints) {
|
||||
return maxPoints != null && maxPoints > 0;
|
||||
}
|
||||
}
|
||||
+285
@@ -0,0 +1,285 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.controller;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
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.zhgh.activity.fitnesswalk.contants.FitnessWalkMode;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkAwardUser;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkRaffleRules;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkRaffleUser;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkCommonService;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkStepRaffleService;
|
||||
import com.budwk.app.zhgh.integral.model.IntegralDetail;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:FitnessWalkStepRaffleController
|
||||
* @Date 2024/12/27 14:43
|
||||
* @注释 健步走抽奖控制器
|
||||
*/
|
||||
@IocBean
|
||||
@Ok("json")
|
||||
@ApiOperation("健步走手动抽奖")
|
||||
@At("/platform/fitnessWalk/stepRaffle")
|
||||
public class FitnessWalkStepRaffleController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
@Inject
|
||||
private FitnessWalkCommonService fitnessWalkCommonService;
|
||||
@Inject
|
||||
private FitnessWalkStepRaffleService fitnessWalkStepRaffleService;
|
||||
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/activity/fitnesswalk/stepRaffle.html")
|
||||
@SaCheckPermission("fitnessWalk.stepRaffle")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("获取抽奖列表")
|
||||
@SaCheckPermission("fitnessWalk.stepRaffle")
|
||||
public Result pageData(PageForm pageForm,
|
||||
@Param("activityId") String activityId,
|
||||
@Param("unionId") String unionId,
|
||||
@Param("unitId") String unitId){
|
||||
Sql sql = fitnessWalkStepRaffleService.getRaffleSql(pageForm, activityId, unionId, unitId);
|
||||
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success().addData(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("获取活动级联数据")
|
||||
@SaCheckPermission("fitnessWalk.stepRaffle")
|
||||
public Result getCascadersActivity(@Param("year") int year) {
|
||||
return Result.success().addData(fitnessWalkCommonService.cascaderActivity(year, FitnessWalkMode.STEP_COUNT));
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("设置抽奖规则,并抽奖")
|
||||
@SLog(tag = "健步走手动抽奖", msg = "设置抽奖规则并抽奖")
|
||||
@SaCheckPermission("fitnessWalk.stepRaffle")
|
||||
public Result saveRaffle(FitnessWalkRaffleRules fitnessWalkRaffleRules){
|
||||
baseService.dao().insertOrUpdate(fitnessWalkRaffleRules);
|
||||
fitnessWalkStepRaffleService.manualLottery(fitnessWalkRaffleRules.getActivityId());
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("获取抽奖规则")
|
||||
@SaCheckPermission("fitnessWalk.stepRaffle")
|
||||
public Result getRaffle(String activityId){
|
||||
FitnessWalkRaffleRules raffleRules = baseService.dao().fetch(FitnessWalkRaffleRules.class, Cnd.where("activityId", "=", activityId));
|
||||
return Result.success().addData(raffleRules);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 小程序获取奖项信息
|
||||
* @param activityId
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("小程序获取奖项信息")
|
||||
public Result getAwardList(String activityId){
|
||||
List<NutMap> activityAwardList = fitnessWalkStepRaffleService.getActivityAwardList(activityId);
|
||||
return Result.success().addData(activityAwardList);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 小程序获取自己的中奖信息
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("小程序获取自己的中奖信息")
|
||||
public Result getAwardInfo(String activityId, String userId){
|
||||
Dao dao = fitnessWalkStepRaffleService.dao();
|
||||
FitnessWalkAwardUser awardUser = dao.fetch(FitnessWalkAwardUser.class, Cnd.where("activityId", "=", activityId).and("userId", "=", userId));
|
||||
FitnessWalkRaffleUser raffleUser = dao.fetch(FitnessWalkRaffleUser.class, Cnd.where("activityId", "=", activityId).and("userId", "=", userId));
|
||||
|
||||
NutMap map = NutMap.NEW();
|
||||
if (Lang.isNotEmpty(raffleUser) && !raffleUser.getIsRaffle()) {
|
||||
if (Lang.isNotEmpty(awardUser)) {
|
||||
map.put("awardName", awardUser.getAwardName());
|
||||
} else {
|
||||
map.put("awardName", "没有中奖");
|
||||
}
|
||||
map.put("raffleNum", 1);
|
||||
} else {
|
||||
map.put("raffleNum", 0);
|
||||
}
|
||||
return Result.success().addData(map);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 小程序获取查询是否可以抽奖
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("小程序获取查询是否可以抽奖")
|
||||
public Result checkRaffle(String activityId, String userId){
|
||||
Dao dao = fitnessWalkStepRaffleService.dao();
|
||||
FitnessWalkRaffleUser raffleUser = dao.fetch(FitnessWalkRaffleUser.class,
|
||||
Cnd.where("activityId", "=", activityId)
|
||||
.and("userId", "=", userId));
|
||||
if (Lang.isNotEmpty(raffleUser)) {
|
||||
return raffleUser.getIsRaffle() ? Result.error() : Result.success();
|
||||
} else {
|
||||
return Result.error();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 抽奖成功后,修改数据库状态
|
||||
* @param activityId
|
||||
* @param userId
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("抽奖成功后,修改数据库状态")
|
||||
@SLog(tag = "健步走手动抽奖", msg = "抽奖成功后,修改数据库状态")
|
||||
public Result updateUserAward(String activityId, String userId) {
|
||||
fitnessWalkStepRaffleService.dao().update(FitnessWalkAwardUser.class,
|
||||
Chain.make("isRead", true).add("applyDate", DateUtil.date()),
|
||||
Cnd.where("activityId", "=", activityId).and("userId", "=", userId));
|
||||
|
||||
fitnessWalkStepRaffleService.dao().update(FitnessWalkRaffleUser.class,
|
||||
Chain.make("isRaffle", true),
|
||||
Cnd.where("activityId", "=", activityId).and("userId", "=", userId));
|
||||
// 增加积分
|
||||
FitnessWalkAwardUser awardUser = dao.fetch(FitnessWalkAwardUser.class, Cnd.where("activityId", "=", activityId).and("userId", "=", userId));
|
||||
IntegralDetail detail = new IntegralDetail();
|
||||
detail.setId(awardUser.getId());
|
||||
detail.setYear(String.valueOf(DateUtil.thisYear()));
|
||||
detail.setUserId(awardUser.getUserId());
|
||||
detail.setIntegral(String.valueOf(awardUser.getPoints()));
|
||||
detail.setIntegralNotes(awardUser.getAwardName());
|
||||
detail.setBizId(awardUser.getId());
|
||||
detail.setIntegralTime(DateUtil.date());
|
||||
dao.insert(detail);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("导出中奖名单")
|
||||
@SaCheckPermission("fitnessWalk.stepRaffle")
|
||||
public void exportAwardExcel(String searchKeyword, String activityId,
|
||||
String lotteryTime, HttpServletResponse response) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("activityId", "=", activityId);
|
||||
cnd.andEX("awardName", "=", lotteryTime);
|
||||
if (StrUtil.isNotBlank(searchKeyword)) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("username", searchKeyword);
|
||||
seg.orLike("loginName", searchKeyword);
|
||||
cnd.and(seg);
|
||||
}
|
||||
cnd.and("isRead", "=", true);
|
||||
List<FitnessWalkAwardUser> list = fitnessWalkCommonService.dao().query(FitnessWalkAwardUser.class, cnd);
|
||||
|
||||
for (FitnessWalkAwardUser awardUser : list) {
|
||||
awardUser.setApplyDate(awardUser.getApplyDate());
|
||||
}
|
||||
|
||||
List<ExcelExportEntity> entityList = new ArrayList<>();
|
||||
ExcelExportEntity no = new ExcelExportEntity("序号", "no", 10);
|
||||
no.setFormat("isAddIndex");
|
||||
entityList.add(no);
|
||||
entityList.add(new ExcelExportEntity("工号", "loginName", 20));
|
||||
entityList.add(new ExcelExportEntity("姓名", "username", 20));
|
||||
entityList.add(new ExcelExportEntity("分工会", "unionName", 20));
|
||||
entityList.add(new ExcelExportEntity("单位", "unitName", 40));
|
||||
entityList.add(new ExcelExportEntity("奖项名称", "awardName", 20));
|
||||
entityList.add(new ExcelExportEntity("中奖时间", "applyDate2", 20));
|
||||
|
||||
try {
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, list);
|
||||
workbook.write(response.getOutputStream());
|
||||
CommonDownloadUtil.download("健步走中奖人员名单.xlsx", workbook, response);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("导出健步走达标人员名单")
|
||||
@SaCheckPermission("fitnessWalk.stepRaffle")
|
||||
public void exportExcel(String searchKeyword, String activityId, String unionId,
|
||||
String unitId, HttpServletResponse response) {
|
||||
PageForm pageForm = new PageForm();
|
||||
pageForm.setSearchKeyword(searchKeyword);
|
||||
Sql sql = fitnessWalkStepRaffleService.getRaffleSql(pageForm, activityId, unionId, unitId);
|
||||
|
||||
List<NutMap> list = fitnessWalkStepRaffleService.listMap(sql);
|
||||
|
||||
List<ExcelExportEntity> entityList = new ArrayList<>();
|
||||
ExcelExportEntity no = new ExcelExportEntity("序号", "no", 10);
|
||||
no.setFormat("isAddIndex");
|
||||
entityList.add(no);
|
||||
entityList.add(new ExcelExportEntity("工号", "loginname", 20));
|
||||
entityList.add(new ExcelExportEntity("姓名", "username", 20));
|
||||
entityList.add(new ExcelExportEntity("分工会", "unionname", 20));
|
||||
entityList.add(new ExcelExportEntity("单位", "unitname", 40));
|
||||
entityList.add(new ExcelExportEntity("达标天数", "standardsDays", 20));
|
||||
entityList.add(new ExcelExportEntity("步数", "total_steps", 20));
|
||||
|
||||
try {
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, list);
|
||||
workbook.write(response.getOutputStream());
|
||||
CommonDownloadUtil.download("健步走达标人员名单.xlsx", workbook, response);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
+274
@@ -0,0 +1,274 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.controller;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
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.zhgh.activity.fitnesswalk.contants.FitnessWalkMode;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkActivity;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkCommonService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
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.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 步数排行榜
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json")
|
||||
@ApiOperation("健步走步数排行榜")
|
||||
@At("/platform/fitnessWalk/stepRanking")
|
||||
public class FitnessWalkStepRankingController {
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
|
||||
@Inject
|
||||
private FitnessWalkCommonService fitnessWalkCommonService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/activity/fitnesswalk/stepRanking.html")
|
||||
@SaCheckPermission("fitnessWalk.stepRanking")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("获取步数排行榜")
|
||||
@SaCheckPermission("fitnessWalk.stepRanking")
|
||||
public Result pageData(PageForm pageForm,
|
||||
@Param("activityId") String activityId,
|
||||
@Param("unionId") String unionId,
|
||||
@Param("unitId") String unitId,
|
||||
@Param("mode") String mode) {
|
||||
Pagination pagination = fitnessWalkCommonService.getStepRankingPagination(pageForm, activityId, unionId, unitId, mode);
|
||||
return Result.success().addData(pagination);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取所有教工 今天的步数及活动时间范围内的步数
|
||||
*
|
||||
* @param activityId
|
||||
* @param mode day:今天 all:所有
|
||||
* @return {@link Object}
|
||||
*/
|
||||
@At
|
||||
@Ok("json:full")
|
||||
@ApiOperation("获取今日步数及活动范围内步数")
|
||||
@SLog(type = "校工会特色活动", tag = "健身走-计步步数排行榜", msg = "小程序接口(获取今日步数及活动范围内步数)")
|
||||
public Result getUserStepRanking(String activityId, String mode, Integer pageNumber, Integer pageSize) {
|
||||
if ("day".equals(mode)) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
t.step,
|
||||
t.applyDate,
|
||||
u.username
|
||||
FROM
|
||||
`fitness_walk_step` t
|
||||
LEFT JOIN sys_user u ON u.id = t.userId
|
||||
WHERE
|
||||
t.activityId = @activityId
|
||||
AND t.applyDate = @today
|
||||
GROUP BY u.id
|
||||
ORDER BY t.step DESC
|
||||
""");
|
||||
sql.setParam("activityId", activityId);
|
||||
sql.setParam("today", DateUtil.today());
|
||||
Pagination pagination = baseService.listPageMap(pageNumber, 50, sql);
|
||||
return Result.success().addData(pagination);
|
||||
} else if ("week".equals(mode)) {
|
||||
// 周榜
|
||||
Date startOfWeek = DateUtil.beginOfWeek(new Date());
|
||||
Date endOfWeek = DateUtil.endOfWeek(new Date());
|
||||
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
t.userId,
|
||||
sum( t.step ) AS step,
|
||||
u.username
|
||||
FROM
|
||||
`fitness_walk_step` t
|
||||
LEFT JOIN sys_user u ON u.id = t.userId
|
||||
WHERE
|
||||
t.activityId = @activityId
|
||||
AND t.applyDate >= @startTime
|
||||
AND t.applyDate <= @endTime
|
||||
GROUP BY
|
||||
t.userId
|
||||
ORDER BY
|
||||
step DESC
|
||||
""");
|
||||
sql.setParam("activityId", activityId);
|
||||
sql.setParam("startTime", startOfWeek);
|
||||
sql.setParam("endTime", endOfWeek);
|
||||
Pagination pagination = baseService.listPageMap(pageNumber, 50, sql);
|
||||
return Result.success().addData(pagination);
|
||||
} else if ("month".equals(mode)) {
|
||||
// 月榜
|
||||
Date firstDayOfMonth = DateUtil.beginOfMonth(new Date());
|
||||
Date lastDayOfMonth = DateUtil.endOfMonth(new Date());
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
t.userId,
|
||||
sum( t.step ) AS step,
|
||||
u.username
|
||||
FROM
|
||||
`fitness_walk_step` t
|
||||
LEFT JOIN sys_user u ON u.id = t.userId
|
||||
WHERE
|
||||
t.activityId = @activityId
|
||||
AND t.applyDate >= @startTime
|
||||
AND t.applyDate <= @endTime
|
||||
GROUP BY
|
||||
t.userId
|
||||
ORDER BY
|
||||
step DESC
|
||||
""");
|
||||
sql.setParam("activityId", activityId);
|
||||
sql.setParam("startTime", firstDayOfMonth);
|
||||
sql.setParam("endTime", lastDayOfMonth);
|
||||
Pagination pagination = baseService.listPageMap(pageNumber, 50, sql);
|
||||
return Result.success().addData(pagination);
|
||||
} else if ("all".equals(mode)) {
|
||||
// 总达标榜
|
||||
FitnessWalkActivity activity = fitnessWalkCommonService.getActivity(activityId);
|
||||
DateTime startTime = DateUtil.date(activity.getStartTime());
|
||||
DateTime endTime = DateUtil.date(activity.getEndTime());
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
SUM(sub.max_step) AS step,
|
||||
u.username
|
||||
FROM (
|
||||
SELECT
|
||||
userId,
|
||||
activityId,
|
||||
applyDate,
|
||||
MAX(step) AS max_step
|
||||
FROM
|
||||
fitness_walk_step
|
||||
WHERE
|
||||
activityId = @activityId
|
||||
AND applyDate >= @startTime AND applyDate <= @endTime
|
||||
GROUP BY
|
||||
userId,
|
||||
activityId,
|
||||
applyDate
|
||||
) sub
|
||||
left join `user` u ON u.id = sub.userId
|
||||
GROUP BY
|
||||
userId
|
||||
ORDER BY
|
||||
step desc
|
||||
""");
|
||||
sql.setParam("activityId", activityId);
|
||||
sql.setParam("startTime", startTime);
|
||||
sql.setParam("endTime", endTime);
|
||||
Pagination pagination = baseService.listPageMap(pageNumber, 50, sql);
|
||||
return Result.success().addData(pagination);
|
||||
} else if ("points".equals(mode)) {
|
||||
// 积分榜
|
||||
FitnessWalkActivity activity = fitnessWalkCommonService.getActivity(activityId);
|
||||
DateTime startTime = DateUtil.date(activity.getStartTime());
|
||||
DateTime endTime = DateUtil.date(activity.getEndTime());
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
SUM(sub.max_step) AS step,
|
||||
u.username
|
||||
FROM (
|
||||
SELECT
|
||||
userId,
|
||||
activityId,
|
||||
applyDate,
|
||||
MAX(points) AS max_step
|
||||
FROM
|
||||
fitness_walk_step
|
||||
WHERE
|
||||
activityId = @activityId
|
||||
AND applyDate >= @startTime AND applyDate <= @endTime
|
||||
GROUP BY
|
||||
userId,
|
||||
activityId,
|
||||
applyDate
|
||||
) sub
|
||||
left join `user` u ON u.id = sub.userId
|
||||
GROUP BY
|
||||
userId
|
||||
ORDER BY
|
||||
step desc
|
||||
""");
|
||||
sql.setParam("activityId", activityId);
|
||||
sql.setParam("startTime", startTime);
|
||||
sql.setParam("endTime", endTime);
|
||||
Pagination pagination = baseService.listPageMap(pageNumber, 50, sql);
|
||||
return Result.success().addData(pagination);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("步数排行榜导出")
|
||||
@SaCheckPermission("fitnessWalk.stepRanking")
|
||||
@SLog(type = "校工会特色活动", tag = "健身走-计步步数排行榜", msg = "步数排行榜导出", param = true, result = true)
|
||||
public void exportExcel(@Param("searchName") String searchName,
|
||||
@Param("searchKeyword") String searchKeyword,
|
||||
@Param("activityId") String activityId,
|
||||
@Param("unionId") String unionId,
|
||||
@Param("unitId") String unitId,
|
||||
@Param("mode") String mode,
|
||||
HttpServletResponse response) {
|
||||
List<NutMap> stepRankingList = fitnessWalkCommonService.getStepRankingList(searchName, searchKeyword, activityId, unionId, unitId, mode);
|
||||
|
||||
List<ExcelExportEntity> entityList = new ArrayList<>();
|
||||
ExcelExportEntity no = new ExcelExportEntity("序号", "no", 10);
|
||||
no.setFormat("isAddIndex");
|
||||
entityList.add(no);
|
||||
entityList.add(new ExcelExportEntity("姓名", "username", 20));
|
||||
entityList.add(new ExcelExportEntity("工号", "loginname", 20));
|
||||
entityList.add(new ExcelExportEntity("分工会", "unionname", 20));
|
||||
entityList.add(new ExcelExportEntity("单位", "unitname", 20));
|
||||
entityList.add(new ExcelExportEntity("today".equals(mode) ? "今日步数" : "活动期间总步数", "total_steps", 20));
|
||||
try {
|
||||
String title = ("today".equals(mode) ? DateUtil.format(new Date(), "yyyy年MM月dd日") : "活动期间总") + "步数榜.xlsx";
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, stepRankingList);
|
||||
workbook.write(response.getOutputStream());
|
||||
CommonDownloadUtil.download(title, workbook, response);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("获取联级活动")
|
||||
@SaCheckPermission("fitnessWalk.stepRanking")
|
||||
public Result getCascadersActivity(@Param("year") int year) {
|
||||
return Result.success().addData(fitnessWalkCommonService.cascaderActivity(year, FitnessWalkMode.STEP_COUNT));
|
||||
}
|
||||
}
|
||||
+165
@@ -0,0 +1,165 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.controller;
|
||||
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
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.zhgh.activity.fitnesswalk.contants.FitnessWalkMode;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkCommonService;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.utils.WeAppCloudUtil;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.integration.jedis.RedisService;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@IocBean
|
||||
@Ok("json")
|
||||
@ApiOperation("计步步数统计")
|
||||
@At("/platform/fitnessWalk/stepStatistics")
|
||||
public class FitnessWalkStepStatisticsController {
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
@Inject
|
||||
private RedisService redisService;
|
||||
@Inject
|
||||
private WeAppCloudUtil weAppCloudUtil;
|
||||
@Inject
|
||||
private FitnessWalkCommonService fitnessWalkCommonService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/activity/fitnesswalk/stepStatistics.html")
|
||||
@SaCheckPermission("fitnessWalk.stepStatistics")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 公共sql
|
||||
* @return
|
||||
*/
|
||||
private String getSql() {
|
||||
return """
|
||||
SELECT
|
||||
u.loginname,
|
||||
u.username,
|
||||
u.unionName AS unionname,
|
||||
u.unitName AS unitname,
|
||||
al.applyDate,
|
||||
al.step,
|
||||
date_format(al.applyDate,'%Y-%m-%d') as prizeData
|
||||
FROM
|
||||
`fitness_walk_step` al
|
||||
LEFT JOIN `vw_user` u ON u.id = al.userId
|
||||
$condition
|
||||
""";
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("json:full")
|
||||
@ApiOperation("计步步数统计")
|
||||
@SaCheckPermission("fitnessWalk.stepStatistics")
|
||||
public Result pageData(PageForm pageForm,
|
||||
@Param("year") Integer year,
|
||||
@Param("activityId") String activityId,
|
||||
@Param("activityDate") String[] activityDate,
|
||||
@Param("unionId") String unionId,
|
||||
@Param("unitId") String unitId) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
Sql sql = Sqls.create(getSql());
|
||||
if (Lang.isNotEmpty(activityDate)) {
|
||||
cnd.and("date_format(al.applyDate,'%Y-%m-%d')", ">=", activityDate[0]);
|
||||
cnd.and("date_format(al.applyDate,'%Y-%m-%d')", "<=", activityDate[1]);
|
||||
}
|
||||
if(StrUtil.isNotBlank(pageForm.getSearchKeyword())){
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("u.username",pageForm.getSearchKeyword());
|
||||
seg.orLike("u.loginname",pageForm.getSearchKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
cnd.andEX("YEAR(al.applyDate)", "=", year);
|
||||
cnd.andEX("al.activityId", "=", activityId);
|
||||
cnd.andEX("u.unionid", "=", unionId);
|
||||
cnd.andEX("u.unitId", "=", unitId);
|
||||
cnd.desc("al.applyDate");
|
||||
cnd.desc("u.unioncode");
|
||||
cnd.groupBy("al.applyDate", "al.userId");
|
||||
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success().addData(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("获取联级活动")
|
||||
@SaCheckPermission("fitnessWalk.stepStatistics")
|
||||
public Result getCascadersActivity(@Param("year") int year) {
|
||||
return Result.success().addData(fitnessWalkCommonService.cascaderActivity(year, FitnessWalkMode.STEP_COUNT));
|
||||
}
|
||||
|
||||
|
||||
@Ok("void")
|
||||
@At("/exportExcel")
|
||||
@ApiOperation("计步步数统计表导出")
|
||||
@SaCheckPermission("fitnessWalk.stepStatistics")
|
||||
public void exportExcel(@Param("activityId") String activityId,
|
||||
@Param("activityDate") String[] activityDate,
|
||||
@Param("unionId") String unionId,
|
||||
@Param("unitId") String unitId, HttpServletResponse response) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
Sql sql = Sqls.create(getSql());
|
||||
if (activityDate.length > 0) {
|
||||
cnd.and("date_format(al.applyDate,'%Y-%m-%d')", ">=", activityDate[0]);
|
||||
cnd.and("date_format(al.applyDate,'%Y-%m-%d')", "<=", activityDate[1]);
|
||||
}
|
||||
cnd.andEX("al.activityId", "=", activityId);
|
||||
cnd.andEX("u.unionid", "=", unionId);
|
||||
cnd.andEX("u.unitId", "=", unitId);
|
||||
cnd.desc("al.applyDate");
|
||||
cnd.desc("u.unioncode");
|
||||
sql.setCondition(cnd);
|
||||
|
||||
List<NutMap> exportList = baseService.listMap(sql);
|
||||
|
||||
List<ExcelExportEntity> entityList = new ArrayList<>() {{
|
||||
add(new ExcelExportEntity("姓名", "username", 20));
|
||||
add(new ExcelExportEntity("工号", "loginname", 20));
|
||||
add(new ExcelExportEntity("单位", "unitname", 20));
|
||||
add(new ExcelExportEntity("分工会", "unionname", 20));
|
||||
add(new ExcelExportEntity("当前步数", "step", 20));
|
||||
add(new ExcelExportEntity("日期", "prizeData", 20));
|
||||
}};
|
||||
|
||||
try {
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, exportList);
|
||||
workbook.write(response.getOutputStream());
|
||||
CommonDownloadUtil.download("计步步数统计表.xlsx", workbook, response);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
+155
@@ -0,0 +1,155 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.controller;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.contants.FitnessWalkMode;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkAwardUser;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkCommonService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
/**
|
||||
* 用户中奖榜
|
||||
*/
|
||||
@IocBean
|
||||
@Ok("json")
|
||||
@ApiOperation("小程序计步步数中奖榜")
|
||||
@At("/platform/fitnessWalk/stepWining")
|
||||
public class FitnessWalkStepWiningController {
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
|
||||
@Inject
|
||||
private FitnessWalkCommonService fitnessWalkCommonService;
|
||||
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/activity/fitnesswalk/stepWining.html")
|
||||
@SaCheckPermission("fitnessWalk.stepWining")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取中奖榜
|
||||
*
|
||||
* @param activityId
|
||||
* @return {@link Object}
|
||||
*/
|
||||
@At
|
||||
@Ok("json:full")
|
||||
@ApiOperation("小程序获取中奖榜")
|
||||
@SLog(type = "校工会特色活动",tag = "健身走-计步步数中奖榜",msg = "获取中奖榜")
|
||||
public Result getUserStepWining(String activityId) {
|
||||
return Result.success().addData(fitnessWalkCommonService.getWiningRankingUserList(activityId));
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("获取联级活动")
|
||||
@SaCheckPermission("fitnessWalk.stepWining")
|
||||
public Result getCascadersActivity(@Param("year") int year) {
|
||||
return Result.success().addData(fitnessWalkCommonService.cascaderActivity(year, FitnessWalkMode.STEP_COUNT));
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("小程序中奖榜导出")
|
||||
@SaCheckPermission("fitnessWalk.stepWining")
|
||||
@SLog(type = "校工会特色活动",tag = "健身走-计步步数中奖榜",msg = "导出中奖榜")
|
||||
public void exportUserStepWining(String activityId, HttpServletResponse response){
|
||||
List<NutMap> winingRankingUserList = fitnessWalkCommonService.getWiningRankingUserList(activityId);
|
||||
List<ExcelExportEntity> entityList = new ArrayList<>();
|
||||
ExcelExportEntity no = new ExcelExportEntity("序号", "no", 10);
|
||||
no.setFormat("isAddIndex");
|
||||
entityList.add(no);
|
||||
entityList.add(new ExcelExportEntity("工号", "loginName", 20));
|
||||
entityList.add(new ExcelExportEntity("姓名", "username", 20));
|
||||
entityList.add(new ExcelExportEntity("分工会", "unionName", 20));
|
||||
entityList.add(new ExcelExportEntity("单位", "unitName", 40));
|
||||
entityList.add(new ExcelExportEntity("奖项名称", "awardName", 20));
|
||||
entityList.add(new ExcelExportEntity("步数", "awardSteps", 20));
|
||||
entityList.add(new ExcelExportEntity("中奖时间", "applyDate", 20));
|
||||
try {
|
||||
response.setContentType("application/octet-stream");
|
||||
response.setHeader("content-disposition", "attachment;filename="
|
||||
+ URLEncoder.encode("中奖明细.zip", "UTF-8"));
|
||||
ZipOutputStream zipOutputStream = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
|
||||
for (NutMap map : winingRankingUserList) {
|
||||
List<NutMap> awardList = map.getAsList("awardList", NutMap.class);
|
||||
awardList.forEach(v->v.setv("applyDate",DateUtil.format(v.getTime("applyDate"),"yyyy-MM-dd")));
|
||||
zipOutputStream.putNextEntry(new ZipEntry(map.getString("title") + ".xlsx"));
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), entityList, awardList);
|
||||
workbook.write(zipOutputStream);
|
||||
zipOutputStream.closeEntry();
|
||||
}
|
||||
zipOutputStream.flush();
|
||||
zipOutputStream.close();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 中奖奖项列表
|
||||
*
|
||||
* @param activityId
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("小程序获取中奖奖项列表")
|
||||
public Result prizeOption(String activityId) {
|
||||
List<NutMap> list = fitnessWalkCommonService.prizeOption(activityId);
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 中奖用户
|
||||
* @param lotteryTime
|
||||
* @param activityId
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("小程序获取中奖用户")
|
||||
public Result prizeUsers(String lotteryTime, String activityId, String searchKeyword) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("activityId", "=", activityId);
|
||||
cnd.andEX("awardName", "=", lotteryTime);
|
||||
if (StrUtil.isNotBlank(searchKeyword)) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("username", searchKeyword);
|
||||
seg.orLike("loginName", searchKeyword);
|
||||
cnd.and(seg);
|
||||
}
|
||||
cnd.and("isRead", "=", true);
|
||||
List<FitnessWalkAwardUser> awardUserList = fitnessWalkCommonService.dao().query(FitnessWalkAwardUser.class, cnd);
|
||||
return Result.success(awardUserList);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,235 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.model;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class FitnessWalkActivity {
|
||||
|
||||
@ApiModelProperty(value = "小程序活动Id")
|
||||
private String _id;
|
||||
// 主活动名称
|
||||
@ApiModelProperty(value = "主活动名称")
|
||||
private String masterActivityName;
|
||||
// 分支活动名称
|
||||
@ApiModelProperty(value = "分支活动名称")
|
||||
private String branchActivityName;
|
||||
// 活动地址
|
||||
@ApiModelProperty(value = "活动地址")
|
||||
private String address;
|
||||
|
||||
@ApiModelProperty(value = "活动礼品")
|
||||
private String giftName;
|
||||
|
||||
@ApiModelProperty(value = "活动分组Id")
|
||||
private String groupId;
|
||||
|
||||
@ApiModelProperty(value = "创建分工会Id")
|
||||
private String unionId;
|
||||
|
||||
@ApiModelProperty(value = "活动模式")
|
||||
private String activityModel;
|
||||
|
||||
@ApiModelProperty(value = "活动报名时间范围,时间戳模式")
|
||||
private Long[] applyTime;
|
||||
|
||||
@ApiModelProperty(value = "活动报名开始时间")
|
||||
private Long applyStartTime;
|
||||
|
||||
@ApiModelProperty(value = "活动报名结束时间")
|
||||
private Long applyEndTime;
|
||||
|
||||
@ApiModelProperty(value = "活动时间范围,时间戳模式")
|
||||
private Long[] time;
|
||||
|
||||
@ApiModelProperty(value = "活动开始时间")
|
||||
private Long startTime;
|
||||
|
||||
@ApiModelProperty(value = "活动结束时间")
|
||||
private Long endTime;
|
||||
|
||||
@ApiModelProperty(value = "活动描述")
|
||||
private String note;
|
||||
|
||||
@ApiModelProperty(value = "活动封面")
|
||||
private String cover;
|
||||
|
||||
@ApiModelProperty(value = "活动临时封面")
|
||||
private String tempCover;
|
||||
|
||||
@ApiModelProperty(value = "是否需要答题")
|
||||
private Boolean isQuestion;
|
||||
|
||||
@ApiModelProperty(value = "答题活动Id")
|
||||
private String questionId;
|
||||
|
||||
@ApiModelProperty(value = "步数模式")
|
||||
private String speedControlMode;
|
||||
|
||||
//打卡完成之后 gift_voucher:礼品券 cert:完赛证书 null啥也不干
|
||||
@ApiModelProperty(value = "打卡完成之后操作")
|
||||
private String punchFinishAfter;
|
||||
|
||||
//完赛证书
|
||||
@ApiModelProperty(value = "完赛证书")
|
||||
private String completionCertificateCover;
|
||||
|
||||
//完赛证书临时url
|
||||
@ApiModelProperty(value = "完赛证书临时url")
|
||||
private String tempCompletionCertificateCover;
|
||||
|
||||
//是否抽奖
|
||||
@ApiModelProperty(value = "是否抽奖")
|
||||
private Boolean isLottery;
|
||||
|
||||
//打卡模式奖品列表
|
||||
@ApiModelProperty(value = "打卡完成之后抽奖信息")
|
||||
private List<PunchLotteryPrize> punchLotteryPrizes;
|
||||
|
||||
@ApiModelProperty(value = "是否显示礼品券")
|
||||
private Boolean showGiftTicket;
|
||||
|
||||
@ApiModelProperty(value = "知识卡的图片")
|
||||
private List<Pts> pts;
|
||||
|
||||
@ApiModelProperty(value = "打开点位,线路")
|
||||
private List<Point> linePoints;
|
||||
|
||||
@ApiModelProperty(value = "打开点位,线路2")
|
||||
private List<Point> linePoints2;
|
||||
|
||||
//是否按顺序签到
|
||||
@ApiModelProperty(value = "是否按顺序签到")
|
||||
private Boolean isOrderSignIn;
|
||||
|
||||
//是否多条线路
|
||||
@ApiModelProperty(value = "是否多条线路")
|
||||
private Boolean isMultipleLines;
|
||||
|
||||
//抽奖模式 none无 everyday每天 monthly每月 custom自定义
|
||||
@ApiModelProperty(value = "抽奖模式")
|
||||
private String lotteryMode;
|
||||
|
||||
//每月抽奖模式抽奖时间
|
||||
@ApiModelProperty(value = "每月抽奖模式抽奖时间")
|
||||
private List<Date> everyMonthLotteryTime;
|
||||
|
||||
@ApiModelProperty(value = "自定义模式抽奖抽奖时间规则")
|
||||
private List<CustomLotteryRule> customLotteryRules;
|
||||
|
||||
@ApiModelProperty(value = "每日模式抽奖抽奖时间规则")
|
||||
private DayLotteryRule dayLotteryRule;
|
||||
|
||||
@ApiModelProperty(value = "随机图片数组")
|
||||
private List<String> randomPics;
|
||||
|
||||
@ApiModelProperty(value = "模板随机图片数组")
|
||||
private List<String> templateRandomPics;
|
||||
|
||||
@ApiModelProperty(value = "外链地址")
|
||||
private String externalLinkAddress;
|
||||
|
||||
@ApiModelProperty(value = "是否开启距离限制")
|
||||
private Boolean enableDistance;
|
||||
|
||||
@ApiModelProperty(value = "签到几个点位算完成")
|
||||
private Integer finishPointNum;
|
||||
|
||||
@ApiModelProperty(value = "是否自动抽奖")
|
||||
private Boolean isAutoLottery;
|
||||
|
||||
@ApiModelProperty(value = "手动抽奖,抽奖资格天数")
|
||||
private Integer lotteryQualificationDays;
|
||||
|
||||
@ApiModelProperty(value = "手动抽奖,抽奖资格步数")
|
||||
private Integer lotteryQualificationSteps;
|
||||
|
||||
@ApiModelProperty(value = "是否启用积分")
|
||||
private Boolean isPoints;
|
||||
|
||||
@ApiModelProperty(value = "达标获得积分")
|
||||
private Integer lotteryQualificationPoints;
|
||||
|
||||
@ApiModelProperty(value = "额外积分的达标步数")
|
||||
private Integer otherSteps;
|
||||
|
||||
@ApiModelProperty(value = "根据额外步数来计算的额外积分")
|
||||
private Integer otherPoints;
|
||||
|
||||
@ApiModelProperty(value = "封顶积分")
|
||||
private Integer maxPoints;
|
||||
|
||||
@Data
|
||||
public static class Point implements Serializable {
|
||||
private String type;
|
||||
private Double[] coordinates;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class Pts implements Serializable {
|
||||
private int code;
|
||||
private String name;
|
||||
private int interval;
|
||||
private List<String> issueIds;
|
||||
private Point location;
|
||||
private int radius;
|
||||
private String tip;
|
||||
}
|
||||
|
||||
/**
|
||||
* 自定义抽奖规则
|
||||
*/
|
||||
@Data
|
||||
public static class CustomLotteryRule implements Serializable {
|
||||
//抽奖时间
|
||||
private Date lotteryTime;
|
||||
//抽奖从那天开始计算
|
||||
private Date startDate;
|
||||
//抽奖截至到哪天
|
||||
private Date endDate;
|
||||
//奖项名称
|
||||
private String awardName;
|
||||
//抽奖人数
|
||||
private Integer lotteryUserNum;
|
||||
//抽奖资格步数
|
||||
private Integer lotteryQualificationStep;
|
||||
//抽奖资格天数
|
||||
private Integer lotteryQualificationDay;
|
||||
}
|
||||
|
||||
/**
|
||||
* 每日抽奖规则
|
||||
*/
|
||||
@Data
|
||||
public static class DayLotteryRule implements Serializable {
|
||||
//抽奖资格步数
|
||||
private Integer lotteryQualificationStep;
|
||||
//抽奖资格天数
|
||||
private Integer lotteryQualificationDay;
|
||||
//抽奖人数
|
||||
private Integer lotteryUserNum;
|
||||
//是否可以重复抽奖
|
||||
private Boolean repeatLottery;
|
||||
//是否可以增加抽奖机会
|
||||
private Boolean addLotteryChance;
|
||||
//每日抽奖模式抽奖时间
|
||||
private String everyDayLotteryTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* 打卡抽奖奖品列表
|
||||
*/
|
||||
@Data
|
||||
public static class PunchLotteryPrize implements Serializable{
|
||||
private String name;
|
||||
private String value;
|
||||
private String url;
|
||||
//份数
|
||||
private String num;
|
||||
}
|
||||
|
||||
}
|
||||
+101
@@ -0,0 +1,101 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.model;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
import org.nutz.dao.interceptor.annotation.PrevInsert;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
@Table
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class FitnessWalkAwardUser extends BaseModel {
|
||||
|
||||
@Column
|
||||
@Name
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR)
|
||||
@Comment("活动")
|
||||
private String activityId;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Comment("用户Id")
|
||||
private String userId;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Comment("工号")
|
||||
private String loginName;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Comment("姓名")
|
||||
private String username;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Comment("奖项名称")
|
||||
private String awardName;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Comment("工会id")
|
||||
private String unionId;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
@Comment("工会名称")
|
||||
private String unionName;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Comment("单位id")
|
||||
private String unitId;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.INT)
|
||||
@Comment("达标天数")
|
||||
private Integer standardsDays;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 20)
|
||||
@Comment("中奖步数")
|
||||
private String awardSteps;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
@Comment("单位名称")
|
||||
private String unitName;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.DATETIME)
|
||||
@Comment("中奖时间")
|
||||
private Date applyDate;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
@Comment("是否已读")
|
||||
private Boolean isRead;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.DATE)
|
||||
@Comment("开始时间")
|
||||
private Date startDate;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.DATE)
|
||||
@Comment("结束时间")
|
||||
private Date endDate;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.INT)
|
||||
@Comment("积分")
|
||||
private Integer points;
|
||||
}
|
||||
+78
@@ -0,0 +1,78 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.model;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
import org.nutz.dao.interceptor.annotation.PrevInsert;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Table
|
||||
@Data
|
||||
@Comment("打卡模式抽奖记录")
|
||||
public class FitnessWalkPunchLottery extends BaseModel {
|
||||
|
||||
@Column
|
||||
@Name
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Comment("活动Id")
|
||||
private String activityId;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Comment("用户Id")
|
||||
private String userId;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
@Comment("用户工号")
|
||||
private String loginName;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
@Comment("中奖用户")
|
||||
private String userName;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 20)
|
||||
@Comment("奖品名称")
|
||||
private String prizeName;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Comment("奖品")
|
||||
private String prizeId;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
@Comment("是否中奖")
|
||||
private Boolean isWin;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.DATETIME)
|
||||
@Comment("中奖时间")
|
||||
private Date winDate;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
@Comment("是否已读")
|
||||
private Boolean isRead;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.DATETIME)
|
||||
@Comment("兑奖时间")
|
||||
private Date exchangeDate;
|
||||
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
@Comment("是否兑换")
|
||||
private Boolean isExchange;
|
||||
}
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.model;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
import org.nutz.dao.interceptor.annotation.PrevInsert;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:FitenssWalkRaffleRules
|
||||
* @Date 2024/12/28 10:05
|
||||
* @注释
|
||||
*/
|
||||
@Data
|
||||
@Table
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class FitnessWalkRaffleRules extends BaseModel {
|
||||
|
||||
@Column
|
||||
@Name
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR)
|
||||
@Comment("活动id")
|
||||
private String activityId;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
@Comment("手动抽奖规则")
|
||||
private List<ManualLotteryRules> manualLotteryRules;
|
||||
|
||||
@Data
|
||||
public static class ManualLotteryRules implements Serializable {
|
||||
// 奖项名称
|
||||
private String awardName;
|
||||
// 奖项积分
|
||||
private Integer points;
|
||||
// 抽奖人数
|
||||
private Integer lotteryUserNum;
|
||||
// 抽奖类型
|
||||
private String raffleType;
|
||||
// 排名位次
|
||||
private Integer rankingPosition;
|
||||
// 是否兼得
|
||||
private Boolean isSimultaneously;
|
||||
}
|
||||
}
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.model;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
import org.nutz.dao.interceptor.annotation.PrevInsert;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:FitnessWalkRaffleUser
|
||||
* @Date 2024/12/28 17:10
|
||||
* @注释
|
||||
*/
|
||||
@Data
|
||||
@Table
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class FitnessWalkRaffleUser extends BaseModel {
|
||||
|
||||
@Column
|
||||
@Name
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Comment("活动id")
|
||||
private String activityId;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Comment("用户id")
|
||||
private String userId;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
@Comment("用户工号")
|
||||
private String loginName;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
@Comment("用户姓名")
|
||||
private String username;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.INT)
|
||||
@Comment("达标天数")
|
||||
private Integer standardsDays;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 20)
|
||||
@Comment("中奖步数")
|
||||
private String awardSteps;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
@Comment("是否已抽奖")
|
||||
private Boolean isRaffle;
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.model;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
import org.nutz.dao.interceptor.annotation.PrevInsert;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
//@Table("fitness_walk_step_${month}")
|
||||
@Table
|
||||
public class FitnessWalkStep extends BaseModel implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Column
|
||||
@Name
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR)
|
||||
@Comment("活动id")
|
||||
private String activityId;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Comment("姓名Id")
|
||||
private String userId;
|
||||
|
||||
@Column
|
||||
@ColDefine(customType = "int")
|
||||
@Comment("步数")
|
||||
private Integer step;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.INT)
|
||||
@Comment("积分")
|
||||
private Integer points;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.DATE)
|
||||
@Comment("时间")
|
||||
private Date applyDate;
|
||||
}
|
||||
+86
@@ -0,0 +1,86 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.service;
|
||||
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.contants.Cascader;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.contants.FitnessWalkMode;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkActivity;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkAwardUser;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface FitnessWalkCommonService extends BaseService<FitnessWalkAwardUser> {
|
||||
|
||||
//活动缓存时间
|
||||
int CACHE_TIME = 7200;
|
||||
|
||||
/**
|
||||
* 活动,从Redis中取
|
||||
*
|
||||
* @param activityId 活动id
|
||||
* @return
|
||||
*/
|
||||
FitnessWalkActivity getActivity(String activityId);
|
||||
|
||||
|
||||
/**
|
||||
* 获取所有活动
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
List<FitnessWalkActivity> getAllActivity();
|
||||
|
||||
/**
|
||||
* 级联活动
|
||||
*/
|
||||
List<Cascader> cascaderActivity(int year, FitnessWalkMode mode);
|
||||
|
||||
|
||||
/**
|
||||
* 添加活动或修改活动,存放至redis
|
||||
*
|
||||
* @param activity 活动
|
||||
*/
|
||||
void addOrEditDoSaveRedis(FitnessWalkActivity activity);
|
||||
|
||||
|
||||
/**
|
||||
* 健身走抽奖模式添加定时抽奖任务
|
||||
*
|
||||
* @param fitnessWalkActivity 活动
|
||||
*/
|
||||
void addLotteryTask(FitnessWalkActivity fitnessWalkActivity);
|
||||
|
||||
|
||||
/**
|
||||
* 获取步数排行榜
|
||||
*
|
||||
* @param activityId 活动id
|
||||
* @param unionId 工会id
|
||||
* @param unitId 单位id
|
||||
* @param mode today all
|
||||
* @return
|
||||
*/
|
||||
Pagination getStepRankingPagination(PageForm pageForm, String activityId, String unionId, String unitId, String mode);
|
||||
|
||||
List<NutMap> getStepRankingList(String searchName, String searchKeyword, String activityId, String unionId, String unitId, String mode);
|
||||
|
||||
|
||||
/**
|
||||
* 获取中奖榜
|
||||
*
|
||||
* @param activityId 活动id
|
||||
* @return
|
||||
*/
|
||||
List<NutMap> getWiningRankingUserList(String activityId);
|
||||
|
||||
/**
|
||||
* 中奖奖项列表
|
||||
* @param activityId
|
||||
* @return
|
||||
*/
|
||||
List<NutMap> prizeOption(String activityId);
|
||||
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.service;
|
||||
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkAwardUser;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface FitnessWalkPunchStatisticsService extends BaseService<FitnessWalkAwardUser> {
|
||||
|
||||
List<NutMap> unionRegCheckInNum(String activityId, String unionId);
|
||||
|
||||
List<JSONObject> unionRegistrationData(String activityId, String unionId);
|
||||
|
||||
List<JSONObject> unionCheckInData(String activityId, String unionId);
|
||||
|
||||
List<JSONObject> exportNotGetGiftVoucherUsers(String activityId);
|
||||
List<JSONObject> exportNotUseGiftVoucherUsers(String activityId);
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.service;
|
||||
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkRaffleRules;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:FitnessWalkStepRaffleService
|
||||
* @Date 2024/12/28 11:13
|
||||
* @注释
|
||||
*/
|
||||
public interface FitnessWalkStepRaffleService extends BaseService<FitnessWalkRaffleRules> {
|
||||
|
||||
Sql getRaffleSql(PageForm pageForm, String activityId, String unionId, String unitId);
|
||||
|
||||
/**
|
||||
* 获取活动的奖项
|
||||
* @param activityId
|
||||
* @return
|
||||
*/
|
||||
List<NutMap> getActivityAwardList(String activityId);
|
||||
|
||||
/**
|
||||
* 手动抽奖
|
||||
* @param activityId 活动id
|
||||
*/
|
||||
void manualLottery(String activityId);
|
||||
}
|
||||
+492
@@ -0,0 +1,492 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
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.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.sys.models.Sys_task;
|
||||
import com.budwk.app.sys.services.SysTaskService;
|
||||
import com.budwk.app.task.services.TaskPlatformService;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.contants.Cascader;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.contants.FitnessWalkMode;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkActivity;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkAwardUser;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkCommonService;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.utils.WeAppCloudUtil;
|
||||
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.Static;
|
||||
import org.nutz.integration.jedis.RedisService;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.json.Json;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.Strings;
|
||||
import org.nutz.lang.random.R;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@IocBean(args = {"refer:dao"})
|
||||
public class FitnessWalkCommonServiceImpl extends BaseServiceImpl<FitnessWalkAwardUser> implements FitnessWalkCommonService {
|
||||
|
||||
@Inject
|
||||
private RedisService redisService;
|
||||
|
||||
@Inject
|
||||
private WeAppCloudUtil weAppCloudUtil;
|
||||
|
||||
@Inject
|
||||
private SysTaskService sysTaskService;
|
||||
|
||||
@Inject
|
||||
private TaskPlatformService taskPlatformService;
|
||||
|
||||
|
||||
public FitnessWalkCommonServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 活动,从Redis中取
|
||||
*
|
||||
* @param activityId 活动id
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public FitnessWalkActivity getActivity(String activityId) {
|
||||
if (StrUtil.isBlank(activityId)) {
|
||||
throw new BaseException("请传递活动");
|
||||
}
|
||||
String redisKey = "FitnessWalk:" + activityId;
|
||||
Boolean exists = redisService.exists("FitnessWalk:" + activityId);
|
||||
FitnessWalkActivity activity = null;
|
||||
exists = false;
|
||||
if (exists) {
|
||||
String string = redisService.get(redisKey);
|
||||
activity = JSONUtil.toBean(string, FitnessWalkActivity.class);
|
||||
if (Lang.isNotEmpty(activity.getRandomPics())) {
|
||||
List<String> urlStr = new ArrayList<>();
|
||||
for (String url : activity.getRandomPics()) {
|
||||
String tempUrl = weAppCloudUtil.httpFile(url);
|
||||
urlStr.add(tempUrl);
|
||||
}
|
||||
activity.setTemplateRandomPics(urlStr);
|
||||
redisService.set(redisKey, JSONUtil.toJsonStr(activity));
|
||||
}
|
||||
|
||||
if (Strings.isNotBlank(activity.getCover())) {
|
||||
String tempUrl = weAppCloudUtil.httpFile(activity.getCover());
|
||||
activity.setTempCover(tempUrl);
|
||||
}
|
||||
|
||||
if(Strings.isNotBlank(activity.getCompletionCertificateCover())){
|
||||
String tempUrl = weAppCloudUtil.httpFile(activity.getCompletionCertificateCover());
|
||||
activity.setTempCompletionCertificateCover(tempUrl);
|
||||
}
|
||||
|
||||
} else {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("db.collection('activity').doc('").append(activityId).append("').get()");
|
||||
try {
|
||||
JSONObject jsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.QUERY, sql.toString());
|
||||
activity = jsonObject.getJSONArray("data").stream()
|
||||
.map(v -> JSONUtil.toBean((String) v, FitnessWalkActivity.class))
|
||||
.findFirst().orElse(null);
|
||||
if (Lang.isNotEmpty(activity.getRandomPics())) {
|
||||
List<String> urlStr = new ArrayList<>();
|
||||
for (String url : activity.getRandomPics()) {
|
||||
String tempUrl = weAppCloudUtil.httpFile(url);
|
||||
urlStr.add(tempUrl);
|
||||
}
|
||||
activity.setTemplateRandomPics(urlStr);
|
||||
}
|
||||
if (Strings.isNotBlank(activity.getCover())) {
|
||||
String tempCover = weAppCloudUtil.httpFile(activity.getCover());
|
||||
activity.setTempCover(tempCover);
|
||||
}
|
||||
|
||||
if(Strings.isNotBlank(activity.getCompletionCertificateCover())){
|
||||
String tempUrl = weAppCloudUtil.httpFile(activity.getCompletionCertificateCover());
|
||||
activity.setTempCompletionCertificateCover(tempUrl);
|
||||
}
|
||||
|
||||
redisService.setex(redisKey, CACHE_TIME, JSONUtil.toJsonStr(activity));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
throw new RuntimeException("获取数据异常!");
|
||||
}
|
||||
}
|
||||
|
||||
if (AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_CHAIRMAN.name(), RoleConstant.BRANCH_UNION_OPERATOR.name(), RoleConstant.BRANCH_UNION_ADMIN.name())
|
||||
&& !AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
return SecurityUtil.getUnionId().equals(activity.getUnionId()) ? activity : null;
|
||||
}
|
||||
return activity;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<FitnessWalkActivity> getAllActivity() {
|
||||
List<FitnessWalkActivity> fitnessWalkActivities;
|
||||
if (redisService.exists("FitnessWalk:ActivityList")) {
|
||||
String dataString = redisService.get("FitnessWalk:ActivityList");
|
||||
fitnessWalkActivities = JSONUtil.toList(dataString, FitnessWalkActivity.class);
|
||||
} else {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("db.collection('activity').field({")
|
||||
.append("masterActivityName:true,")
|
||||
.append("branchActivityName:true,")
|
||||
.append("activityModel:true,")
|
||||
.append("endTime:true,")
|
||||
.append("startTime:true,")
|
||||
.append("unionId:true")
|
||||
.append("}).orderBy('startTime', 'desc').get()");
|
||||
JSONObject jsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.QUERY, sql.toString());
|
||||
fitnessWalkActivities = jsonObject.getJSONArray("data").stream()
|
||||
.map(v -> JSONUtil.toBean((String) v, FitnessWalkActivity.class)).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
if (AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_CHAIRMAN.name(), RoleConstant.BRANCH_UNION_OPERATOR.name(), RoleConstant.BRANCH_UNION_ADMIN.name())
|
||||
&& !AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
fitnessWalkActivities = fitnessWalkActivities.stream()
|
||||
.filter(v -> SecurityUtil.getUnionId().equals(v.getUnionId()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
redisService.set("FitnessWalk:ActivityList", JSONUtil.toJsonStr(fitnessWalkActivities));
|
||||
return fitnessWalkActivities;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<Cascader> cascaderActivity(int year, FitnessWalkMode mode) {
|
||||
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.set(Calendar.YEAR, year);
|
||||
|
||||
long startTs = DateUtil.beginOfYear(calendar.getTime()).getTime();
|
||||
long endTs = DateUtil.endOfYear(calendar.getTime()).getTime();
|
||||
|
||||
List<Cascader> cascaders = this.getAllActivity().stream()
|
||||
.filter(v -> v.getActivityModel().equals(mode.getValue()) && v.getStartTime() >= startTs && v.getStartTime() <= endTs)
|
||||
.collect(Collectors.groupingBy(FitnessWalkActivity::getMasterActivityName))
|
||||
.entrySet().stream()
|
||||
.map(entry -> {
|
||||
Cascader cascader = new Cascader();
|
||||
cascader.setValue(entry.getValue().stream().findFirst().map(FitnessWalkActivity::get_id).orElse(null));
|
||||
cascader.setLabel(entry.getKey());
|
||||
if (entry.getValue().size() > 1) {
|
||||
List<Cascader> children = entry.getValue().stream().map(z -> {
|
||||
Cascader cascader2 = new Cascader();
|
||||
cascader2.setLabel(z.getBranchActivityName());
|
||||
cascader2.setValue(z.get_id());
|
||||
return cascader2;
|
||||
}).collect(Collectors.toList());
|
||||
cascader.setChildren(children);
|
||||
}
|
||||
return cascader;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
return cascaders;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addOrEditDoSaveRedis(FitnessWalkActivity activity) {
|
||||
redisService.del("FitnessWalk:" + activity.get_id());
|
||||
redisService.del("FitnessWalk:ActivityList");
|
||||
redisService.set("FitnessWalk:" + activity.get_id(), JSONUtil.toJsonStr(activity));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addLotteryTask(FitnessWalkActivity fitnessWalkActivity) {
|
||||
//删除和该活动关联的定时任务
|
||||
List<Sys_task> oldTasks = sysTaskService.dao().query(Sys_task.class, Cnd.where("data", "like", "%" + fitnessWalkActivity.get_id() + "%"));
|
||||
for (Sys_task task : oldTasks) {
|
||||
taskPlatformService.delete(task.getId(), task.getId());
|
||||
sysTaskService.delete(task.getId());
|
||||
}
|
||||
|
||||
|
||||
if ("everyday".equals(fitnessWalkActivity.getLotteryMode())) {
|
||||
FitnessWalkActivity.DayLotteryRule dayLotteryRule = fitnessWalkActivity.getDayLotteryRule();
|
||||
if (Lang.isNotEmpty(dayLotteryRule)) {
|
||||
//每日抽奖时间
|
||||
String lotteryTime = dayLotteryRule.getEveryDayLotteryTime();
|
||||
SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
|
||||
Date timeDate = null;
|
||||
try {
|
||||
timeDate = timeFormat.parse(lotteryTime);
|
||||
} catch (ParseException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
String cron = timeDate.getSeconds() + " " + timeDate.getMinutes() + " " + timeDate.getHours() + " * * ?";
|
||||
try {
|
||||
List<String> cronExeTimes = taskPlatformService.getCronExeTimesPlus(cron);
|
||||
|
||||
if (CollectionUtil.isNotEmpty(cronExeTimes)) {
|
||||
//调用类
|
||||
String jobClass = "io.v.nutz.task.job.fitnessWalk.FitnessWalkLotteryJob";
|
||||
HashMap<String, Object> map = new HashMap<>(5);
|
||||
map.put("id", fitnessWalkActivity.get_id());
|
||||
// 唯一标识的删除id,用于执行定时任务完成后,将此定时任务禁用
|
||||
map.put("deleteId", R.UU32());
|
||||
//每天抽奖达标步数
|
||||
map.put("lotteryQualificationStep", dayLotteryRule.getLotteryQualificationStep().toString());
|
||||
//每天抽奖人数
|
||||
map.put("lotteryUserNum", dayLotteryRule.getLotteryUserNum().toString());
|
||||
//抽奖模式
|
||||
map.put("mode", "everyday");
|
||||
|
||||
// 设置定时任务
|
||||
Sys_task task = new Sys_task();
|
||||
task.setName(fitnessWalkActivity.getMasterActivityName() + "健步走计步模式每日抽奖任务");
|
||||
task.setJobClass(jobClass);
|
||||
task.setNote("健步走计步模式每日抽奖任务");
|
||||
task.setCron(cron);
|
||||
task.setData(Json.toJson(map));
|
||||
task.setDisabled(false);
|
||||
sysTaskService.insert(task);
|
||||
taskPlatformService.add(task.getId(), task.getId(), task.getJobClass(), task.getCron(), task.getNote(), task.getData());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
} else if ("custom".equals(fitnessWalkActivity.getLotteryMode())) {
|
||||
List<FitnessWalkActivity.CustomLotteryRule> customLotteryRules = fitnessWalkActivity.getCustomLotteryRules();
|
||||
customLotteryRules.removeIf(Lang::isEmpty);
|
||||
|
||||
for (FitnessWalkActivity.CustomLotteryRule rule : customLotteryRules) {
|
||||
Date lotteryTime = rule.getLotteryTime();
|
||||
SimpleDateFormat dateFormatCron = new SimpleDateFormat("ss mm HH dd MM ? yyyy");
|
||||
// 设置定时任务执行时间
|
||||
String cron = dateFormatCron.format(lotteryTime);
|
||||
try {
|
||||
//调用类
|
||||
String jobClass = "io.v.nutz.task.job.fitnessWalk.FitnessWalkLotteryJob";
|
||||
HashMap<String, Object> map = new HashMap<>(8);
|
||||
map.put("id", fitnessWalkActivity.get_id());
|
||||
// 唯一标识的删除id,用于执行定时任务完成后,将此定时任务禁用
|
||||
map.put("deleteId", R.UU32());
|
||||
//月抽奖达标步数
|
||||
map.put("lotteryQualificationStep", rule.getLotteryQualificationStep().toString());
|
||||
//月抽奖人数
|
||||
map.put("lotteryUserNum", rule.getLotteryUserNum().toString());
|
||||
//查询开始时间
|
||||
map.put("startDate", rule.getStartDate());
|
||||
//查询结束时间
|
||||
map.put("endDate", rule.getEndDate());
|
||||
//抽奖天数
|
||||
map.put("lotteryQualificationDay", rule.getLotteryQualificationDay());
|
||||
//获奖名称
|
||||
map.put("awardName", rule.getAwardName());
|
||||
//抽奖模式
|
||||
map.put("mode", "custom");
|
||||
|
||||
Sys_task task = new Sys_task();
|
||||
task.setName(fitnessWalkActivity.getMasterActivityName() + "健步走计步模式自定义抽奖任务");
|
||||
task.setJobClass(jobClass);
|
||||
task.setNote("健步走计步模式自定义抽奖任务");
|
||||
task.setCron(cron);
|
||||
task.setData(Json.toJson(map));
|
||||
task.setDisabled(false);
|
||||
sysTaskService.insert(task);
|
||||
taskPlatformService.add(task.getId(), task.getId(), task.getJobClass(), task.getCron(), task.getNote(), task.getData());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Pagination getStepRankingPagination(PageForm pageForm, String activityId, String unionId, String unitId, String mode) {
|
||||
Sql sql = rankingListSql(pageForm.getSearchName(), pageForm.getSearchKeyword(), activityId, unionId, unitId, mode);
|
||||
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NutMap> getStepRankingList(String searchName, String searchKeyword, String activityId, String unionId, String unitId, String mode) {
|
||||
Sql sql = rankingListSql(searchName, searchKeyword, activityId, unionId, unitId, mode);
|
||||
return listMap(sql);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取中奖榜
|
||||
*
|
||||
* @param activityId 活动id
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<NutMap> getWiningRankingUserList(String activityId) {
|
||||
FitnessWalkActivity activity = getActivity(activityId);
|
||||
List<NutMap> resultMapList = new ArrayList<>();
|
||||
if ("everyday".equals(activity.getLotteryMode())) {
|
||||
String lastDayFormat = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd");
|
||||
List<FitnessWalkAwardUser> awardUserList = dao().query(FitnessWalkAwardUser.class, Cnd.where("activityId", "=", activityId)
|
||||
.and("DATE( applyDate )", ">=", lastDayFormat));
|
||||
|
||||
//昨天的中奖榜
|
||||
List<FitnessWalkAwardUser> lastDayAwardUserList = awardUserList.stream().filter(v -> DateUtil.compare(v.getApplyDate(),
|
||||
DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") == 0).collect(Collectors.toList());
|
||||
NutMap lastDayAwardMap = new NutMap();
|
||||
//昨日中奖时间
|
||||
lastDayAwardMap.put("title", "昨日中奖榜");
|
||||
lastDayAwardMap.put("lotteryTime", lastDayFormat);
|
||||
lastDayAwardMap.put("awardName", "幸运奖");
|
||||
lastDayAwardMap.put("awardList", lastDayAwardUserList);
|
||||
resultMapList.add(lastDayAwardMap);
|
||||
|
||||
//今天的中奖榜
|
||||
List<FitnessWalkAwardUser> thisDayAwardUserList = (List<FitnessWalkAwardUser>) CollectionUtil.subtract(awardUserList, lastDayAwardUserList);
|
||||
NutMap thisDayAwardMap = new NutMap();
|
||||
//今日中奖时间
|
||||
lastDayAwardMap.put("title", "今日中奖榜");
|
||||
thisDayAwardMap.put("lotteryTime", DateUtil.today());
|
||||
thisDayAwardMap.put("awardName", "幸运奖");
|
||||
thisDayAwardMap.put("awardList", thisDayAwardUserList);
|
||||
resultMapList.add(thisDayAwardMap);
|
||||
|
||||
} else if ("custom".equals(activity.getLotteryMode())) {
|
||||
List<FitnessWalkActivity.CustomLotteryRule> customLotteryRules = activity.getCustomLotteryRules();
|
||||
//当前活动中奖榜单
|
||||
List<FitnessWalkAwardUser> awardUserList = dao().query(FitnessWalkAwardUser.class, Cnd.where("activityId", "=", activityId));
|
||||
|
||||
for (FitnessWalkActivity.CustomLotteryRule rule : customLotteryRules) {
|
||||
NutMap map = new NutMap();
|
||||
List<FitnessWalkAwardUser> customAwardList = awardUserList.stream().filter(v -> DateUtil.compare(v.getApplyDate(), DateUtil.date(rule.getLotteryTime()), "yyyy-MM-dd") == 0).collect(Collectors.toList());
|
||||
//自定义抽奖时间范围
|
||||
map.put("title", DateUtil.format(DateUtil.date(rule.getStartDate()), "MM-dd") + "至" + DateUtil.format(DateUtil.date(rule.getEndDate()), "MM-dd") + rule.getAwardName() + "中奖榜");
|
||||
// map.put("customTimeRange", DateUtil.format(DateUtil.date(rule.getStartDate()), "yyyy-MM-dd") + "——" + DateUtil.format(DateUtil.date(rule.getEndDate()), "yyyy-MM-dd"));
|
||||
//抽奖时间
|
||||
map.put("lotteryTime", DateUtil.format(rule.getLotteryTime(), "yyyy-MM-dd"));
|
||||
//奖项名称
|
||||
map.put("awardName", rule.getAwardName());
|
||||
//中奖人员
|
||||
map.put("awardList", customAwardList);
|
||||
resultMapList.add(map);
|
||||
}
|
||||
}
|
||||
return resultMapList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NutMap> prizeOption(String activityId) {
|
||||
List<FitnessWalkAwardUser> list = dao().query(FitnessWalkAwardUser.class,
|
||||
Cnd.where("activityId", "=", activityId).groupBy("awardName").asc("awardName"));
|
||||
|
||||
List<NutMap> collect = list.stream().map(v -> {
|
||||
NutMap map = new NutMap();
|
||||
map.put("text", v.getAwardName());
|
||||
map.put("value", v.getAwardName());
|
||||
return map;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
|
||||
// FitnessWalkActivity activity = getActivity(activityId);
|
||||
// if ("custom".equals(activity.getLotteryMode())) {
|
||||
// List<FitnessWalkActivity.CustomLotteryRule> customLotteryRules = activity.getCustomLotteryRules();
|
||||
// return customLotteryRules.stream().map(rule -> {
|
||||
// NutMap map = new NutMap();
|
||||
// map.put("text", DateUtil.format(DateUtil.date(rule.getStartDate()), "MM-dd") + "至" + DateUtil.format(DateUtil.date(rule.getEndDate()), "MM-dd") + rule.getAwardName() + "中奖榜");
|
||||
// map.put("value", rule.getLotteryTime());
|
||||
// return map;
|
||||
// }).collect(Collectors.toList());
|
||||
// }
|
||||
return collect;
|
||||
}
|
||||
|
||||
|
||||
private Sql rankingListSql(String searchName, String searchKeyword, String activityId, String unionId, String unitId, String mode) {
|
||||
FitnessWalkActivity activity = getActivity(activityId);
|
||||
Cnd cnd = Cnd.NEW();
|
||||
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
u.id,
|
||||
COALESCE(SUM(sub.step), 0) AS total_steps,
|
||||
u.username,
|
||||
u.loginname,
|
||||
u.unionName,
|
||||
u.unitName,
|
||||
over3k.standardsDays
|
||||
FROM
|
||||
`vw_user` u
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
userId,
|
||||
applyDate,
|
||||
step
|
||||
FROM
|
||||
`fitness_walk_step`
|
||||
WHERE
|
||||
step >= @step
|
||||
AND activityId=@activityId
|
||||
AND $dateSql
|
||||
GROUP BY
|
||||
userId,
|
||||
applyDate
|
||||
) AS sub ON u.id = sub.userId
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
userId,
|
||||
COUNT(DISTINCT DATE(applyDate)) AS standardsDays
|
||||
FROM
|
||||
`fitness_walk_step`
|
||||
WHERE
|
||||
step >= @step
|
||||
AND activityId=@activityId
|
||||
AND $dateSql
|
||||
GROUP BY
|
||||
userId
|
||||
) AS over3k ON u.id = over3k.userId
|
||||
$condition
|
||||
""").setParam("activityId",activityId).setParam("step",0);
|
||||
|
||||
if ("today".equals(mode)) {
|
||||
sql.setVar("dateSql",new Static("DATE(applyDate) = '"+DateUtil.today()+"'"));
|
||||
// cnd.and("DATE( s.applyDate )", "=", DateUtil.today());
|
||||
} else {
|
||||
sql.setVar("dateSql",new Static("DATE(applyDate) >= '"
|
||||
+DateUtil.format(DateUtil.date(activity.getStartTime()), "yyyy-MM-dd")+"' and DATE(applyDate) <= '"
|
||||
+DateUtil.format(DateUtil.date(activity.getEndTime()), "yyyy-MM-dd")+"'"));
|
||||
// cnd.and("DATE( s.applyDate )", ">=", DateUtil.format(DateUtil.date(activity.getStartTime()), "yyyy-MM-dd"));
|
||||
// cnd.and("DATE( s.applyDate )", "<=", DateUtil.format(DateUtil.date(activity.getEndTime()), "yyyy-MM-dd"));
|
||||
}
|
||||
|
||||
if (Strings.isNotBlank(unitId)) {
|
||||
cnd.and("u.unitId", "=", unitId);
|
||||
}
|
||||
if (Strings.isNotBlank(unionId)) {
|
||||
cnd.and("u.unionId", "=", unionId);
|
||||
}
|
||||
|
||||
if (Strings.isNotBlank(searchName) && Strings.isNotBlank(searchKeyword)) {
|
||||
cnd.and(searchName, "LIKE", "%" + searchKeyword + "%");
|
||||
}
|
||||
// cnd.and("u.id","in",Sqls.create("select userId from activity_user_scope where groupId = @groupId").setParam("groupId",activity.getGroupId()));
|
||||
cnd.groupBy("u.id","u.username","u.loginname","u.unionName","u.unitName","over3k.standardsDays");
|
||||
cnd.desc("total_steps");
|
||||
cnd.having(Cnd.NEW().and("COALESCE(SUM(sub.step), 0)",">",0));
|
||||
sql.setCondition(cnd);
|
||||
return sql;
|
||||
}
|
||||
}
|
||||
+247
@@ -0,0 +1,247 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.sys.models.Sys_union;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkAwardUser;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkPunchStatisticsService;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.utils.WeAppCloudUtil;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@IocBean(args = {"refer:dao"})
|
||||
public class FitnessWalkPunchStatisticsServiceImpl extends BaseServiceImpl<FitnessWalkAwardUser> implements FitnessWalkPunchStatisticsService {
|
||||
public FitnessWalkPunchStatisticsServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Inject
|
||||
private WeAppCloudUtil weAppCloudUtil;
|
||||
|
||||
@Override
|
||||
public List<NutMap> unionRegCheckInNum(String activityId, String unionId) {
|
||||
List<Sys_union> unions = dao().query(Sys_union.class, Cnd.NEW().desc("unioncode"));
|
||||
//查询报名的数据
|
||||
StringBuffer regCountSql = new StringBuffer();
|
||||
regCountSql.append("db.collection('register').aggregate()");
|
||||
regCountSql.append(".match({");
|
||||
regCountSql.append("activity_id:'").append(activityId).append("'");
|
||||
if (StrUtil.isNotBlank(unionId)) {
|
||||
regCountSql.append(",unionid:'").append(unionId).append("'");
|
||||
}
|
||||
regCountSql.append("})");
|
||||
regCountSql.append(".group({_id:'$unionid',count:$.sum(1)}).end()");
|
||||
|
||||
JSONObject regCountJsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.AGGREGATE, regCountSql.toString());
|
||||
Map<String, Integer> regCountData = regCountJsonObject.getJSONArray("data").stream().map(v -> {
|
||||
JSONObject rowData = JSONUtil.parseObj((String) v);
|
||||
String id = rowData.getStr("_id");
|
||||
int count = rowData.getJSONObject("count").getInt("$numberInt");
|
||||
return NutMap.NEW().addv("id", id).addv("count", count);
|
||||
}).collect(Collectors.toMap(v -> v.getString("id"), v -> v.getInt("count")));
|
||||
|
||||
//查询打卡的数据
|
||||
StringBuffer checkInCountSql = new StringBuffer();
|
||||
checkInCountSql.append("db.collection('sign').aggregate()");
|
||||
checkInCountSql.append(".match({");
|
||||
checkInCountSql.append("activity_id:'").append(activityId).append("'");
|
||||
if (StrUtil.isNotBlank(unionId)) {
|
||||
checkInCountSql.append(",unionid:'").append(unionId).append("'");
|
||||
}
|
||||
checkInCountSql.append("})");
|
||||
checkInCountSql.append(".group({_id:'$unionid',count: $.addToSet('$userid')})");
|
||||
checkInCountSql.append(".project({_id: 0,unionid:'$_id',count:$.size('$count')})");
|
||||
checkInCountSql.append(".end()");
|
||||
|
||||
JSONObject checkInCountJsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.AGGREGATE, checkInCountSql.toString());
|
||||
Map<String, Integer> checkInCountData = checkInCountJsonObject.getJSONArray("data").stream().map(v -> {
|
||||
JSONObject rowData = JSONUtil.parseObj((String) v);
|
||||
String id = rowData.getStr("unionid");
|
||||
int count = rowData.getJSONObject("count").getInt("$numberInt");
|
||||
return NutMap.NEW().addv("id", id).addv("count", count);
|
||||
}).collect(Collectors.toMap(v -> v.getString("id"), v -> v.getInt("count")));
|
||||
|
||||
List<NutMap> list = unions.stream().map(v -> {
|
||||
String id = v.getId();
|
||||
String unionname = v.getName();
|
||||
String unioncode = v.getUnionCode();
|
||||
|
||||
NutMap map = NutMap.NEW();
|
||||
map.put("id", id);
|
||||
map.put("unionname", unionname);
|
||||
map.put("unioncode", unioncode);
|
||||
map.put("regCount", regCountData.getOrDefault(id, 0));
|
||||
map.put("checkInCount", checkInCountData.getOrDefault(id, 0));
|
||||
|
||||
return map;
|
||||
}).collect(Collectors.toList());
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<JSONObject> unionRegistrationData(String activityId, String unionId) {
|
||||
StringBuffer sql = new StringBuffer("db.collection('register').aggregate()");
|
||||
sql.append(".match({");
|
||||
sql.append("activity_id:'").append(activityId).append("',unionid:'").append(unionId).append("'");
|
||||
sql.append("})");
|
||||
sql.append(".addFields({register_time_date:$.toDate('$register_time')})");
|
||||
sql.append("""
|
||||
.project({
|
||||
_id:true,
|
||||
loginname:true,
|
||||
username:true,
|
||||
unitname:true,
|
||||
mobile:true,
|
||||
sex:true,
|
||||
register_time:true,
|
||||
register_time_str: $.dateToString({
|
||||
date: '$register_time_date',
|
||||
format: '%Y-%m-%d %H:%M:%S',
|
||||
timezone: 'Asia/Shanghai'
|
||||
})
|
||||
})
|
||||
.sort({ unitname: 1 })
|
||||
.end()
|
||||
""");
|
||||
|
||||
JSONObject jsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.AGGREGATE, sql.toString());
|
||||
List<JSONObject> list = jsonObject.getJSONArray("data").stream().map(v -> JSONUtil.parseObj((String) v)).collect(Collectors.toList());
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<JSONObject> unionCheckInData(String activityId, String unionId) {
|
||||
// 查询打卡的数据,根据分工会来
|
||||
String sql = """
|
||||
db.collection('sign').aggregate()
|
||||
.match({
|
||||
activity_id: '%s',
|
||||
unionid: '%s'
|
||||
})
|
||||
.lookup({
|
||||
from: 'activity',
|
||||
localField: 'activity_id',
|
||||
foreignField: '_id',
|
||||
as: 'activity'
|
||||
})
|
||||
.lookup({
|
||||
from: 'gift_voucher',
|
||||
let: {
|
||||
signActivityId: '$activity_id',
|
||||
signLoginName: '$loginname'
|
||||
},
|
||||
pipeline: $.pipeline()
|
||||
.match({
|
||||
$expr: {
|
||||
$and: [
|
||||
{ $eq: ['$activity_id', '$$signActivityId'] },
|
||||
{ $eq: ['$loginname', '$$signLoginName'] }
|
||||
]
|
||||
}
|
||||
})
|
||||
.project({
|
||||
used: 1,
|
||||
_id: 0
|
||||
})
|
||||
.done(),
|
||||
as: 'gift_voucher'
|
||||
})
|
||||
.addFields({
|
||||
used: { $arrayElemAt: ['$gift_voucher.used', 0] },
|
||||
masterActivityName: { $arrayElemAt: ['$activity.masterActivityName', 0] },
|
||||
pts: { $arrayElemAt: ['$activity.pts', 0] },
|
||||
})
|
||||
.group({
|
||||
_id: {
|
||||
activity_id: '$activity_id',
|
||||
loginname: '$loginname'
|
||||
},
|
||||
loginname: { $first: '$loginname' },
|
||||
sex: { $first: '$sex' },
|
||||
username: { $first: '$username' },
|
||||
unitname: { $first: '$unitname' },
|
||||
unionname: { $first: '$unionname' },
|
||||
used: { $first: '$used' },
|
||||
sign_size: { $sum: 1 },
|
||||
masterActivityName: { $first: '$masterActivityName' },
|
||||
pts_size: { $first: { $size: '$pts' } },
|
||||
})
|
||||
.project({
|
||||
_id: 0,
|
||||
loginname: 1,
|
||||
sex: 1,
|
||||
username: 1,
|
||||
unitname: 1,
|
||||
unionname: 1,
|
||||
used: 1,
|
||||
sign_size: { $toString: '$sign_size' },
|
||||
masterActivityName: 1,
|
||||
pts_size: { $toString: '$pts_size' }
|
||||
})
|
||||
.sort({ unitname: 1 })
|
||||
.end()
|
||||
""";
|
||||
sql = sql.formatted(activityId, unionId);
|
||||
JSONObject jsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.AGGREGATE, sql);
|
||||
List<JSONObject> list = jsonObject.getJSONArray("data").stream().map(v -> {
|
||||
JSONObject jo = JSONUtil.parseObj((String) v);
|
||||
if (jo.getInt("sign_size") > jo.getInt("pts_size")) {
|
||||
jo.put("sign_size", jo.getInt("pts_size"));
|
||||
}
|
||||
return jo;
|
||||
}).collect(Collectors.toList());
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<JSONObject> exportNotGetGiftVoucherUsers(String activityId) {
|
||||
//查询报名的人员
|
||||
JSONObject regJsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.AGGREGATE, """
|
||||
db.collection('register').aggregate([
|
||||
{ $match: { activity_id: '%s' } }
|
||||
])
|
||||
.sort({ unitname: 1 })
|
||||
.end()
|
||||
""".formatted(activityId));
|
||||
//查询打完卡获得礼品券的人员
|
||||
JSONObject giftUserJsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.AGGREGATE, """
|
||||
db.collection('gift_voucher').aggregate()
|
||||
.match({ activity_id: '%s' })
|
||||
.group({ _id: '$loginname' })
|
||||
.project({ _id: 0, loginname: '$_id' })
|
||||
.end()
|
||||
""".formatted(activityId));
|
||||
|
||||
List<String> giftUserLoginNames = giftUserJsonObject.getJSONArray("data").stream().map(v -> {
|
||||
JSONObject jo = JSONUtil.parseObj((String) v);
|
||||
return jo.getStr("loginname");
|
||||
}).toList();
|
||||
|
||||
List<JSONObject> list = regJsonObject.getJSONArray("data").stream()
|
||||
.map(v -> JSONUtil.parseObj((String) v))
|
||||
.filter(v -> !giftUserLoginNames.contains(v.getStr("loginname"))).collect(Collectors.toList());
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<JSONObject> exportNotUseGiftVoucherUsers(String activityId) {
|
||||
//查询未使用礼品券的人员
|
||||
JSONObject jsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.AGGREGATE, """
|
||||
db.collection('gift_voucher').aggregate()
|
||||
.match({ activity_id: '%s', used: false })
|
||||
.sort({ unitname: 1 })
|
||||
.end()
|
||||
""".formatted(activityId));
|
||||
return jsonObject.getJSONArray("data").stream()
|
||||
.map(v -> JSONUtil.parseObj((String) v)).collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
+360
@@ -0,0 +1,360 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkActivity;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkAwardUser;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkRaffleRules;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkRaffleUser;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkCommonService;
|
||||
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkStepRaffleService;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
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.dao.util.cri.Static;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Strings;
|
||||
import org.nutz.lang.random.R;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:FitnessWalkStepRaffleServiceImpl
|
||||
* @Date 2024/12/28 11:17
|
||||
* @注释
|
||||
*/
|
||||
@IocBean(args = {"refer:dao"})
|
||||
public class FitnessWalkStepRaffleServiceImpl extends BaseServiceImpl<FitnessWalkRaffleRules> implements FitnessWalkStepRaffleService {
|
||||
public FitnessWalkStepRaffleServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Inject
|
||||
private FitnessWalkCommonService fitnessWalkCommonService;
|
||||
|
||||
/**
|
||||
* 获取可抽奖用户,那就是达标用户
|
||||
* @param pageForm
|
||||
* @param activityId
|
||||
* @param unionId
|
||||
* @param unitId
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Sql getRaffleSql(PageForm pageForm, String activityId, String unionId, String unitId) {
|
||||
FitnessWalkActivity activity = fitnessWalkCommonService.getActivity(activityId);
|
||||
|
||||
Integer lotteryQualificationDays = activity.getLotteryQualificationDays();
|
||||
Integer lotteryQualificationSteps = activity.getLotteryQualificationSteps();
|
||||
Date startDate = DateUtil.parse(DateUtil.format(DateUtil.date(activity.getStartTime()), "yyyy-MM-dd"), "yyyy-MM-dd");
|
||||
Date endDate = DateUtil.parse(DateUtil.format(DateUtil.date(activity.getEndTime()), "yyyy-MM-dd"), "yyyy-MM-dd");
|
||||
|
||||
Cnd cnd = Cnd.NEW();
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
u.id,
|
||||
COALESCE(SUM(sub.step), 0) AS total_steps,
|
||||
u.loginname,
|
||||
u.username,
|
||||
u.unionId,
|
||||
u.unionName,
|
||||
u.unitId,
|
||||
u.unitName,
|
||||
over3k.standardsDays
|
||||
FROM
|
||||
`vw_user` u
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
userId,
|
||||
applyDate,
|
||||
step
|
||||
FROM
|
||||
`fitness_walk_step`
|
||||
WHERE
|
||||
activityId = @activityId
|
||||
AND DATE(applyDate) >= @startDate
|
||||
AND DATE(applyDate) <= @endDate
|
||||
$lotteryQualificationDaySql
|
||||
GROUP BY
|
||||
userId,
|
||||
applyDate
|
||||
) AS sub ON u.id = sub.userId
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
userId,
|
||||
COUNT(DISTINCT DATE(applyDate)) AS standardsDays
|
||||
FROM
|
||||
`fitness_walk_step`
|
||||
WHERE
|
||||
activityId = @activityId
|
||||
AND DATE(applyDate) >= @startDate
|
||||
AND DATE(applyDate) <= @endDate
|
||||
$lotteryQualificationDaySql
|
||||
GROUP BY
|
||||
userId
|
||||
) AS over3k ON u.id = over3k.userId
|
||||
$condition
|
||||
""");
|
||||
if (lotteryQualificationDays != null) {
|
||||
sql.setVar("lotteryQualificationDaySql", new Static(" AND step >= '%s' ".formatted(lotteryQualificationSteps)));
|
||||
cnd.having(cnd.and(new Static(" over3k.standardsDays >= '%s' ".formatted(lotteryQualificationDays))));
|
||||
|
||||
// sql.setVar("stepHavingSql", new Static(" over3k.standardsDays >= '%s' ".formatted(lotteryQualificationDays)));
|
||||
} else {
|
||||
cnd.having(cnd.and(new Static(" COALESCE(SUM(sub.step), 0) >= '%s' ".formatted(lotteryQualificationSteps))));
|
||||
// sql.setVar("stepHavingSql", new Static(" COALESCE(SUM(sub.step), 0) >= '%s' ".formatted(lotteryQualificationSteps)));
|
||||
}
|
||||
sql.setParam("activityId", activityId);
|
||||
sql.setParam("step", lotteryQualificationSteps);
|
||||
sql.setParam("startDate", startDate);
|
||||
sql.setParam("endDate", endDate);
|
||||
|
||||
if (Strings.isNotBlank(unitId)) {
|
||||
cnd.and("u.unitId", "=", unitId);
|
||||
}
|
||||
if (Strings.isNotBlank(unionId)) {
|
||||
cnd.and("u.unionId", "=", unionId);
|
||||
}
|
||||
|
||||
if (pageForm != null && Strings.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("u.loginname", pageForm.getSearchKeyword());
|
||||
seg.orLike("u.username", pageForm.getSearchKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
// cnd.and("u.id","in",Sqls.create("select userId from activity_user_scope where groupId = @groupId").setParam("groupId",activity.getGroupId()));
|
||||
cnd.groupBy("u.id", "u.username", "u.loginname", "u.unionName", "u.unitName");
|
||||
cnd.desc("total_steps");
|
||||
sql.setCondition(cnd);
|
||||
return sql;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取活动的奖项,然后再将奖项去遍历出来
|
||||
* @param activityId
|
||||
* @return { index: 0, name: '奖项名称', type: 0 }
|
||||
*/
|
||||
@Override
|
||||
public List<NutMap> getActivityAwardList(String activityId) {
|
||||
FitnessWalkRaffleRules rules = fetch(Cnd.where("activityId", "=", activityId));
|
||||
List<FitnessWalkRaffleRules.ManualLotteryRules> manualLotteryRules = rules.getManualLotteryRules();
|
||||
// 存放奖品列表
|
||||
List<String> ruleList = new ArrayList<>();
|
||||
// 奖品数量
|
||||
int size = manualLotteryRules.size();
|
||||
if (size == 1) {
|
||||
String prize = manualLotteryRules.get(0).getAwardName();
|
||||
for (int i = 0; i < 8; i++) {
|
||||
ruleList.add(prize);
|
||||
if (ruleList.size() < 8) {
|
||||
ruleList.add("没有中奖");
|
||||
}
|
||||
}
|
||||
} else if (size == 2) {
|
||||
for (int i = 0; i < 8; i++) {
|
||||
String prize = manualLotteryRules.get(i % size).getAwardName();
|
||||
ruleList.add(prize);
|
||||
if (ruleList.size() < 8) {
|
||||
ruleList.add("没有中奖");
|
||||
}
|
||||
}
|
||||
} else if (size == 3) {
|
||||
for (int i = 0; i < 8; ) {
|
||||
for (int j = 0; j < size && i < 8; j++) {
|
||||
String prize = manualLotteryRules.get(j).getAwardName();
|
||||
ruleList.add(prize);
|
||||
if (ruleList.size() < 8) {
|
||||
ruleList.add("没有中奖");
|
||||
i += 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (size == 4) {
|
||||
for (int i = 0; i < 8; ) {
|
||||
for (int j = 0; j < size && i < 8; j++) {
|
||||
String prize = manualLotteryRules.get(j).getAwardName();
|
||||
ruleList.add(prize);
|
||||
if (ruleList.size() < 8) {
|
||||
ruleList.add("没有中奖");
|
||||
i += 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (size == 5) {
|
||||
ruleList = manualLotteryRules.stream().map(FitnessWalkRaffleRules.ManualLotteryRules::getAwardName).collect(Collectors.toList());
|
||||
ruleList.add(2, "没有中奖");
|
||||
ruleList.add(4, "没有中奖");
|
||||
ruleList.add(7, "没有中奖");
|
||||
} else if (size == 6) {
|
||||
ruleList = manualLotteryRules.stream().map(FitnessWalkRaffleRules.ManualLotteryRules::getAwardName).collect(Collectors.toList());
|
||||
ruleList.add(2, "没有中奖");
|
||||
ruleList.add(6, "没有中奖");
|
||||
} else {
|
||||
ruleList = manualLotteryRules.stream().map(FitnessWalkRaffleRules.ManualLotteryRules::getAwardName).collect(Collectors.toList());
|
||||
ruleList.add("没有中奖");
|
||||
}
|
||||
|
||||
List<String> finalRuleList = ruleList;
|
||||
List<NutMap> awardList = IntStream.range(0, ruleList.size())
|
||||
.mapToObj(index -> {
|
||||
String awardName = finalRuleList.get(index);
|
||||
NutMap map = NutMap.NEW();
|
||||
map.put("index", index);
|
||||
map.put("name", awardName);
|
||||
map.put("type", "没有中奖".equals(awardName) ? 1 : 0);
|
||||
return map;
|
||||
}).collect(Collectors.toList());
|
||||
return awardList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 手动抽奖
|
||||
*
|
||||
* @param activityId 活动id
|
||||
*/
|
||||
@Override
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public void manualLottery(String activityId) {
|
||||
// 删除此活动下的获奖记录
|
||||
dao().clear(FitnessWalkAwardUser.class, Cnd.where("activityId", "=", activityId));
|
||||
dao().clear(FitnessWalkRaffleUser.class, Cnd.where("activityId", "=", activityId));
|
||||
|
||||
FitnessWalkActivity activity = fitnessWalkCommonService.getActivity(activityId);
|
||||
Date startDate = DateUtil.parse(DateUtil.format(DateUtil.date(activity.getStartTime()), "yyyy-MM-dd"), "yyyy-MM-dd");
|
||||
Date endDate = DateUtil.parse(DateUtil.format(DateUtil.date(activity.getEndTime()), "yyyy-MM-dd"), "yyyy-MM-dd");
|
||||
|
||||
// 获取达标的所有人,按照步数倒序
|
||||
Sql sql = getRaffleSql(null, activityId, null, null);
|
||||
List<NutMap> list = listMap(sql);
|
||||
|
||||
List<FitnessWalkRaffleUser> raffleUserList = list.stream().map(v -> {
|
||||
FitnessWalkRaffleUser raffleUser = new FitnessWalkRaffleUser();
|
||||
raffleUser.setId(R.UU32());
|
||||
raffleUser.setActivityId(activityId);
|
||||
raffleUser.setUserId(v.getString("id"));
|
||||
raffleUser.setLoginName(v.getString("loginname"));
|
||||
raffleUser.setUsername(v.getString("username"));
|
||||
raffleUser.setAwardSteps(v.getString("total_steps"));
|
||||
raffleUser.setStandardsDays(v.getInt("standardsDays"));
|
||||
raffleUser.setIsRaffle(false);
|
||||
return raffleUser;
|
||||
}).collect(Collectors.toList());
|
||||
dao().fastInsert(raffleUserList);
|
||||
|
||||
Set<String> winningRankLoginNames = new HashSet<>();
|
||||
|
||||
// 获奖人员
|
||||
List<FitnessWalkAwardUser> winningUsers = new ArrayList<>();
|
||||
|
||||
// 获取抽奖规则
|
||||
FitnessWalkRaffleRules rules = fetch(Cnd.where("activityId", "=", activityId));
|
||||
List<FitnessWalkRaffleRules.ManualLotteryRules> manualLotteryRules = rules.getManualLotteryRules();
|
||||
|
||||
// 找出是按照排名来颁奖的奖项
|
||||
List<FitnessWalkRaffleRules.ManualLotteryRules> ranks = manualLotteryRules.stream().filter(v -> "排名".equals(v.getRaffleType()))
|
||||
.sorted(Comparator.comparing(FitnessWalkRaffleRules.ManualLotteryRules::getRankingPosition)).toList();
|
||||
|
||||
for (FitnessWalkRaffleRules.ManualLotteryRules rank : ranks) {
|
||||
String awardName = rank.getAwardName();
|
||||
Integer lotteryUserNum = rank.getLotteryUserNum();
|
||||
|
||||
// 排除之前获奖的人,再倒序排列
|
||||
List<NutMap> canLotteryUsers = list.stream()
|
||||
.filter(v -> !winningRankLoginNames.contains(v.getString("loginname")))
|
||||
.sorted(Comparator.comparingInt((NutMap v) -> v.getInt("total_steps")).reversed())
|
||||
.toList();
|
||||
|
||||
// 截取当前奖项的中奖人员
|
||||
List<NutMap> rankNutMaps = canLotteryUsers.subList(0, lotteryUserNum);
|
||||
// 收集成中奖人员存储
|
||||
List<FitnessWalkAwardUser> collect = rankNutMaps.stream().map(v -> {
|
||||
FitnessWalkAwardUser awardUser = new FitnessWalkAwardUser();
|
||||
awardUser.setId(R.UU32());
|
||||
awardUser.setActivityId(activityId);
|
||||
awardUser.setUserId(v.getString("id"));
|
||||
awardUser.setLoginName(v.getString("loginname"));
|
||||
awardUser.setUsername(v.getString("username"));
|
||||
awardUser.setAwardName(awardName);
|
||||
awardUser.setStartDate(startDate);
|
||||
awardUser.setEndDate(endDate);
|
||||
awardUser.setUnionId(v.getString("unionid"));
|
||||
awardUser.setUnionName(v.getString("unionName"));
|
||||
awardUser.setUnitId(v.getString("unitId"));
|
||||
awardUser.setUnitName(v.getString("unitName"));
|
||||
awardUser.setStandardsDays(v.getInt("standardsDays"));
|
||||
awardUser.setAwardSteps(v.getString("total_steps"));
|
||||
awardUser.setPoints(rank.getPoints());
|
||||
return awardUser;
|
||||
}).toList();
|
||||
|
||||
winningRankLoginNames.addAll(collect.stream().map(FitnessWalkAwardUser::getLoginName).toList());
|
||||
|
||||
winningUsers.addAll(collect);
|
||||
}
|
||||
|
||||
|
||||
List<FitnessWalkRaffleRules.ManualLotteryRules> reachList = manualLotteryRules.stream().filter(v -> "达标".equals(v.getRaffleType()))
|
||||
.sorted(Comparator.comparing(FitnessWalkRaffleRules.ManualLotteryRules::getRankingPosition)).toList();
|
||||
|
||||
for (FitnessWalkRaffleRules.ManualLotteryRules reach : reachList) {
|
||||
List<NutMap> nutMaps;
|
||||
if (reach.getIsSimultaneously() != null && reach.getIsSimultaneously()) {
|
||||
// 可以兼得, 达标了的抽奖就是全部达标的人
|
||||
nutMaps = list;
|
||||
} else {
|
||||
// 不可兼得, 这里要排除其他奖项的中奖人员
|
||||
nutMaps = list.stream().filter(v -> !winningRankLoginNames.contains(v.getString("loginname"))).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
// 抽奖人数
|
||||
Integer lotteryUserNum = reach.getLotteryUserNum();
|
||||
// 奖项名称
|
||||
String awardName = reach.getAwardName();
|
||||
|
||||
// 这里是随机打乱了再去抽奖
|
||||
List<NutMap> reachNutMaps = nutMaps.stream().collect(Collectors.collectingAndThen(Collectors.toList(), collected -> {
|
||||
int size = Math.min(lotteryUserNum, collected.size());
|
||||
Collections.shuffle(collected);
|
||||
return collected.subList(0, size);
|
||||
}));
|
||||
|
||||
List<FitnessWalkAwardUser> collect = reachNutMaps.stream().map(v -> {
|
||||
FitnessWalkAwardUser awardUser = new FitnessWalkAwardUser();
|
||||
awardUser.setId(R.UU32());
|
||||
awardUser.setActivityId(activityId);
|
||||
awardUser.setUserId(v.getString("id"));
|
||||
awardUser.setLoginName(v.getString("loginname"));
|
||||
awardUser.setUsername(v.getString("username"));
|
||||
awardUser.setAwardName(awardName);
|
||||
awardUser.setStartDate(startDate);
|
||||
awardUser.setEndDate(endDate);
|
||||
awardUser.setUnionId(v.getString("unionid"));
|
||||
awardUser.setUnionName(v.getString("unionName"));
|
||||
awardUser.setUnitId(v.getString("unitId"));
|
||||
awardUser.setUnitName(v.getString("unitName"));
|
||||
awardUser.setStandardsDays(v.getInt("standardsDays"));
|
||||
awardUser.setAwardSteps(v.getString("total_steps"));
|
||||
awardUser.setPoints(reach.getPoints());
|
||||
return awardUser;
|
||||
}).toList();
|
||||
|
||||
winningRankLoginNames.addAll(collect.stream().map(FitnessWalkAwardUser::getLoginName).toList());
|
||||
|
||||
winningUsers.addAll(collect);
|
||||
}
|
||||
|
||||
dao().fastInsert(winningUsers);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,170 @@
|
||||
package com.budwk.app.zhgh.activity.fitnesswalk.utils;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.http.HttpUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.budwk.app.base.constant.RedisConstant;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import org.nutz.integration.jedis.RedisService;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 微信小程序云开发工具类
|
||||
*/
|
||||
@IocBean
|
||||
public class WeAppCloudUtil {
|
||||
public static String ENV = "zufe-6guuuwl17ba1b011";
|
||||
|
||||
private static final String APPID = "wx093225a38487550f";
|
||||
|
||||
private static final String APP_SECRET = "23e506ca150f342e9afdcd772cced34a";
|
||||
|
||||
@Inject
|
||||
public RedisService redisService;
|
||||
|
||||
public JSONObject request(CRUD crud, String sql) {
|
||||
String url = crud.url.replace("ACCESS_TOKEN", getAccessToken());
|
||||
String responseJson = HttpUtil.createPost(url).header("Content-Type", "application/json")
|
||||
.body(JSONUtil.toJsonStr(Map.of("env", ENV, "query", sql))).execute().body();
|
||||
JSONObject response = JSONUtil.parseObj(responseJson);
|
||||
if (response.getInt("errcode") == 42001) {
|
||||
redisService.del(RedisConstant.REDIS_KEY_WE_APP_ACCESS_TOKEN);
|
||||
// request(crud, sql);
|
||||
} else if (response.getInt("errcode") == 40001) {
|
||||
redisService.del(RedisConstant.REDIS_KEY_WE_APP_ACCESS_TOKEN);
|
||||
} else if (response.getInt("errcode") != 0) {
|
||||
throw new RuntimeException("小程序云函数接口调用失败,errcode:" + response.getStr("errcode") + ",errmsg:" + response.getStr("errmsg"));
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取token
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
private String getAccessToken() {
|
||||
String token = redisService.get(RedisConstant.REDIS_KEY_WE_APP_ACCESS_TOKEN);
|
||||
if (StrUtil.isNotBlank(token)) {
|
||||
return token;
|
||||
}
|
||||
String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET".replace("APPID", APPID).replace("APPSECRET", APP_SECRET);
|
||||
String responseJson = HttpUtil.createGet(url).execute().body();
|
||||
|
||||
TokenResponse tokenResponse = JSONUtil.toBean(responseJson, TokenResponse.class);
|
||||
// 微信的Access_token,两个小时过期,也就是7200秒
|
||||
redisService.setex(RedisConstant.REDIS_KEY_WE_APP_ACCESS_TOKEN, 7000, tokenResponse.getAccess_token());
|
||||
return tokenResponse.getAccess_token();
|
||||
|
||||
/*String result = Http.get(url).getContent();
|
||||
HashMap<String, Object> tokenObject = Json.fromJson(HashMap.class, result);
|
||||
if (tokenObject.containsKey("errcode")) {
|
||||
log.error("获取token失败------" + tokenObject.get("errmsg"));
|
||||
throw new RuntimeException("获取token失败------" + tokenObject.get("errmsg"));
|
||||
}
|
||||
redisService.setex(RedisConstant.REDIS_KEY_WE_APP_ACCESS_TOKEN, 7200 - 200, (String) tokenObject.get("access_token"));
|
||||
return (String) tokenObject.get("access_token");
|
||||
return null;*/
|
||||
}
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum CRUD {
|
||||
INSERT("https://api.weixin.qq.com/tcb/databaseadd?access_token=ACCESS_TOKEN"),
|
||||
QUERY("https://api.weixin.qq.com/tcb/databasequery?access_token=ACCESS_TOKEN"),
|
||||
DELETE("https://api.weixin.qq.com/tcb/databasedelete?access_token=ACCESS_TOKEN"),
|
||||
UPDATE("https://api.weixin.qq.com/tcb/databaseupdate?access_token=ACCESS_TOKEN"),
|
||||
AGGREGATE("https://api.weixin.qq.com/tcb/databaseaggregate?access_token=ACCESS_TOKEN"),
|
||||
COUNT("https://api.weixin.qq.com/tcb/databasecount?access_token=ACCESS_TOKEN");
|
||||
private final String url;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class Response {
|
||||
private int errcode;
|
||||
private String erremsg;
|
||||
}
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public static class TokenResponse extends Response {
|
||||
private int expires_in;
|
||||
private String access_token;
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传文件返回cloud—url
|
||||
*
|
||||
* @param rootPath
|
||||
* @param file
|
||||
* @return
|
||||
*/
|
||||
public String uploadFile(String rootPath, File file) {
|
||||
String path = rootPath + file.getName();
|
||||
String url = "https://api.weixin.qq.com/tcb/uploadfile?access_token=ACCESS_TOKEN".replace("ACCESS_TOKEN", getAccessToken());
|
||||
String responseJson = HttpUtil.createPost(url).header("Content-Type", "application/json")
|
||||
.body(JSONUtil.toJsonStr(Map.of("env", ENV, "path", path))).execute().body();
|
||||
JSONObject jsonObject = JSONUtil.parseObj(responseJson);
|
||||
if (jsonObject.getInt("errcode") != 0) {
|
||||
throw new RuntimeException(jsonObject.getStr("errmsg"));
|
||||
}
|
||||
try{
|
||||
HttpUtil.createPost(jsonObject.getStr("url"))
|
||||
.form("key", path)
|
||||
.form("Signature", jsonObject.getStr("authorization"))
|
||||
.form("x-cos-security-token", jsonObject.getStr("token"))
|
||||
.form("x-cos-meta-fileid", jsonObject.getStr("cos_file_id"))
|
||||
.form("file", file)
|
||||
.execute().body();
|
||||
return jsonObject.getStr("file_id");
|
||||
}catch (Exception e){
|
||||
return jsonObject.getStr("file_id");
|
||||
}
|
||||
}
|
||||
|
||||
public String httpFile(String fileId) {
|
||||
String url = "https://api.weixin.qq.com/tcb/batchdownloadfile?access_token=ACCESS_TOKEN".replace("ACCESS_TOKEN", getAccessToken());
|
||||
|
||||
HashMap<Object, Object> body = new HashMap<>(2) {{
|
||||
put("env", ENV);
|
||||
put("file_list", new ArrayList<>() {{
|
||||
add(new HashMap<>() {{
|
||||
put("fileid", fileId);
|
||||
put("max_age", 7200);
|
||||
}});
|
||||
}});
|
||||
}};
|
||||
|
||||
Map mf = new HashMap<String, String>();
|
||||
mf.put("fileid", fileId);
|
||||
mf.put("max_age", 7200);
|
||||
ArrayList<Map> fm = new ArrayList<>();
|
||||
fm.add(mf);
|
||||
|
||||
body.put("file_list", fm);
|
||||
|
||||
|
||||
String responseJson = HttpUtil.createPost(url)
|
||||
.header("Content-Type", "application/json")
|
||||
.body(JSONUtil.toJsonStr(body))
|
||||
.execute().body();
|
||||
System.out.println(JSONUtil.toJsonStr(body));
|
||||
JSONObject jsonObject = JSONUtil.parseObj(responseJson);
|
||||
if (jsonObject.getInt("errcode") != 0) {
|
||||
throw new RuntimeException(jsonObject.getStr("errmsg"));
|
||||
}
|
||||
return jsonObject.getJSONArray("file_list").toList(JSONObject.class).get(0).getStr("download_url");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
package com.budwk.app.zhgh.activity.qsv.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
@ApiModel(value = "答题得分计算结果")
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@Builder
|
||||
public class QsvCheckAnswerResult {
|
||||
|
||||
@ApiModelProperty(value = "是否正确")
|
||||
private boolean isCorrect;
|
||||
|
||||
@ApiModelProperty(value = "得分")
|
||||
private float score;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
package com.budwk.app.zhgh.asset.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.asset.model.AssetCategory;
|
||||
import com.budwk.app.zhgh.asset.param.AssetPageForm;
|
||||
import com.budwk.app.zhgh.asset.service.AssetService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2025/7/16 15:05
|
||||
* @description 资产类别
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/asset/category")
|
||||
@Ok("json:full")
|
||||
@Slf4j
|
||||
@Api(tags = "资产类别")
|
||||
public class AssetCategoryController {
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/asset/category/index.html")
|
||||
@SaCheckPermission("asset.category")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("分页查询")
|
||||
@SaCheckPermission("asset.category")
|
||||
public Result pageData(AssetPageForm pageForm) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup group = new SqlExpressionGroup();
|
||||
group.orLike("categoryName", pageForm.getSearchKeyword());
|
||||
group.orLike("categoryCode", pageForm.getSearchKeyword());
|
||||
cnd.and(group);
|
||||
}
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT * FROM `asset_category`
|
||||
$condition
|
||||
""");
|
||||
cnd.asc("categoryCode");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("资产类型新增/编辑")
|
||||
@SaCheckPermission("asset.category")
|
||||
public Result doSubmit(AssetCategory assetCategory) {
|
||||
baseService.insertOrUpdate(assetCategory);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("资产类型新增")
|
||||
@SaCheckPermission("asset.category")
|
||||
public Result doDelete(String id) {
|
||||
baseService.dao().delete(AssetCategory.class, id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("全部资产类型")
|
||||
public Result queryCategory() {
|
||||
List<AssetCategory> categoryList = baseService.dao().query(AssetCategory.class, Cnd.NEW().asc("categoryCode"));
|
||||
return Result.success(categoryList);
|
||||
}
|
||||
}
|
||||
+113
@@ -0,0 +1,113 @@
|
||||
package com.budwk.app.zhgh.asset.controller;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.utils.CommonDownloadUtil;
|
||||
import com.budwk.app.zhgh.asset.param.AssetPageForm;
|
||||
import com.budwk.app.zhgh.asset.service.AssetDepreciationRecordService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2025/7/17 11:32
|
||||
* @description 资产折旧
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/asset/depreciation")
|
||||
@Ok("json:full")
|
||||
@Slf4j
|
||||
@Api(tags = "资产折旧管理")
|
||||
public class AssetDepreciationRecordController {
|
||||
|
||||
|
||||
@Inject
|
||||
private AssetDepreciationRecordService assetDepreciationRecordService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/asset/depreciation/index.html")
|
||||
@SaCheckPermission("asset.depreciation")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("分页查询")
|
||||
@SaCheckPermission("asset.depreciation")
|
||||
public Result pageData(AssetPageForm pageForm) {
|
||||
Sql sql = assetDepreciationRecordService.getSql(pageForm);
|
||||
Pagination pagination = assetDepreciationRecordService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("资产折旧信息删除")
|
||||
@SLog(type = "assetDepreciation", tag = "资产折旧", msg = "删除了一条资产折旧信息")
|
||||
@SaCheckPermission("asset.depreciation")
|
||||
public Result doDelete(String id) {
|
||||
assetDepreciationRecordService.clear(Cnd.where("assetId", "=", id));
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("资产折旧")
|
||||
@SLog(type = "assetDepreciation", tag = "资产折旧", msg = "一键折旧资产")
|
||||
@SaCheckPermission("asset.depreciation")
|
||||
public Result doDepreciation() {
|
||||
assetDepreciationRecordService.doDepreciation();
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("按条件导出资产折旧信息")
|
||||
@SaCheckPermission("asset.depreciation")
|
||||
@SLog(type = "assetDepreciation", tag = "资产折旧", msg = "按条件导出资产折旧信息")
|
||||
public void doExport(AssetPageForm pageForm, HttpServletResponse response) {
|
||||
Sql sql = assetDepreciationRecordService.getSql(pageForm);
|
||||
List<NutMap> list = assetDepreciationRecordService.listMap(sql);
|
||||
try {
|
||||
List<ExcelExportEntity> exportEntities = new ArrayList<>();
|
||||
exportEntities.add(new ExcelExportEntity("资产编号", "assetNumber", 20));
|
||||
exportEntities.add(new ExcelExportEntity("资产名称", "assetName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("类别名称", "categoryName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("责任人", "assetUseUserName", 20));
|
||||
ExcelExportEntity assetAllMoneyEntity = new ExcelExportEntity("原值(元)", "assetAllMoney", 20);
|
||||
assetAllMoneyEntity.setType(10);
|
||||
exportEntities.add(assetAllMoneyEntity);
|
||||
ExcelExportEntity assetSurplusMoneyEntity = new ExcelExportEntity("净值(元)", "assetSurplusMoney", 20);
|
||||
assetSurplusMoneyEntity.setType(10);
|
||||
exportEntities.add(assetSurplusMoneyEntity);
|
||||
ExcelExportEntity assetDepreciationMoneyEntity = new ExcelExportEntity("累计折旧(元)", "assetDepreciationMoney", 20);
|
||||
assetDepreciationMoneyEntity.setType(10);
|
||||
exportEntities.add(assetDepreciationMoneyEntity);
|
||||
exportEntities.add(new ExcelExportEntity("预计使用月份", "assetUsageMonth", 20));
|
||||
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, list);
|
||||
CommonDownloadUtil.download("资产折旧信息.xlsx", workbook, response);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,218 @@
|
||||
package com.budwk.app.zhgh.asset.controller;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.utils.CommonDownloadUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.asset.model.Asset;
|
||||
import com.budwk.app.zhgh.asset.model.AssetDepreciationRecord;
|
||||
import com.budwk.app.zhgh.asset.model.AssetStocktaking;
|
||||
import com.budwk.app.zhgh.asset.param.AssetPageForm;
|
||||
import com.budwk.app.zhgh.asset.service.AssetDepreciationRecordService;
|
||||
import com.budwk.app.zhgh.asset.service.AssetService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.MemberInfoPageForm;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2025/7/16 14:33
|
||||
* @description 资产台账管理
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/asset/manage")
|
||||
@Ok("json:full")
|
||||
@Slf4j
|
||||
@Api(tags = "资产台账管理")
|
||||
public class AssetManageController {
|
||||
|
||||
@Inject
|
||||
private AssetService assetService;
|
||||
@Inject
|
||||
private AssetDepreciationRecordService assetDepreciationRecordService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/asset/manage/index.html")
|
||||
@SaCheckPermission("asset.manage")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("分页查询")
|
||||
@SaCheckPermission("asset.manage")
|
||||
public Result pageData(AssetPageForm pageForm) {
|
||||
Sql sql = assetService.getSql(pageForm);
|
||||
Pagination pagination = assetService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("资产新增")
|
||||
@SLog(type = "assetManage", tag = "资产管理", msg = "新增了一条资产信息")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("asset.manage")
|
||||
public Result doAdd(Asset asset) {
|
||||
int year = Calendar.getInstance().get(Calendar.YEAR);
|
||||
if (StrUtil.isBlank(asset.getAssetNumber())) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT count(1) FROM `asset` where LEFT(assetNumber,4) = @year and LENGTH(assetNumber) = 8
|
||||
""").setParam("year", year);
|
||||
int count = assetService.count(sql);
|
||||
String bh = String.format("%04d", count + 1);
|
||||
asset.setAssetNumber(year + bh);
|
||||
}
|
||||
asset.setApplyUserId(SecurityUtil.getUserId());
|
||||
assetService.insert(asset);
|
||||
|
||||
//增加折旧表记录
|
||||
AssetDepreciationRecord record = assetDepreciationRecordService.initAssetDepreciationRecord(asset.getAssetUnitPrice(), asset.getAssetQuantity(), asset.getAssetUsedDate(), asset.getAssetRetiredAssetsDate());
|
||||
if (ObjectUtil.isNotEmpty(record)) {
|
||||
record.setAssetId(asset.getId());
|
||||
assetService.insert(record);
|
||||
}
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("资产编辑")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(type = "assetManage", tag = "资产管理", msg = "编辑了一条资产信息")
|
||||
@SaCheckPermission("asset.manage")
|
||||
public Result doEdit(Asset asset) {
|
||||
assetService.update(asset);
|
||||
|
||||
//增加折旧表记录
|
||||
Asset fetch = assetService.fetch(asset.getId());
|
||||
//如果资产类型不等于原来的或者预计报废时间不等于原来的
|
||||
if (!fetch.getAssetCategoryId().equals(asset.getAssetCategoryId()) || !fetch.getAssetRetiredAssetsDate().equals(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)) {
|
||||
record.setAssetId(asset.getId());
|
||||
assetService.insert(record);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("资产删除")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(type = "assetManage", tag = "资产管理", msg = "删除了一条资产信息")
|
||||
@SaCheckPermission("asset.manage")
|
||||
public Result doDelete(String id) {
|
||||
assetDepreciationRecordService.clear(Cnd.where("assetId", "=", id));
|
||||
assetService.delete(id);
|
||||
assetService.dao().clear(AssetStocktaking.class, Cnd.where("assetId", "=", id));
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("查询资产单条记录")
|
||||
@SaCheckPermission("asset.manage")
|
||||
public Result findOne(String id) {
|
||||
return Result.success(assetService.fetch(id));
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("查询资产单条记录并跟关联的信息")
|
||||
@SaCheckPermission("asset.manage")
|
||||
public Result fondOneAsset(String id) {
|
||||
return Result.success(assetService.findOne(id));
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("查询责任人")
|
||||
@SaCheckPermission("asset.manage")
|
||||
public Result searchAssetUseUser(String query) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.where().orLike("username", query);
|
||||
cnd.where().orLike("loginname", query);
|
||||
cnd.where().orLike("id", query);
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
id,
|
||||
loginname,
|
||||
username,
|
||||
unionName,
|
||||
unionId
|
||||
FROM
|
||||
`vw_user`
|
||||
$condition
|
||||
""");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = assetService.listPage(1, 10, sql);
|
||||
return Result.success(pagination.getList());
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("按条件导出资产台账")
|
||||
@SaCheckPermission("asset.manage")
|
||||
@SLog(type = "assetManage", tag = "资产台账", msg = "按条件导出资产台账")
|
||||
public void doExport(AssetPageForm pageForm, HttpServletResponse response) {
|
||||
Sql sql = assetService.getSql(pageForm);
|
||||
List<NutMap> list = assetService.listMap(sql);
|
||||
try {
|
||||
List<ExcelExportEntity> exportEntities = new ArrayList<>();
|
||||
exportEntities.add(new ExcelExportEntity("资产编号", "assetNumber", 20));
|
||||
exportEntities.add(new ExcelExportEntity("资产名称", "assetName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("类别名称", "categoryName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("资产规格型号", "assetSpecs", 20));
|
||||
exportEntities.add(new ExcelExportEntity("供应商名称", "assetSupplierName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("采购方式", "assetFundingSubjectName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("用途", "assetPurposeName", 20));
|
||||
ExcelExportEntity assetUnitPriceEntity = new ExcelExportEntity("单价(元)", "assetUnitPrice", 20);
|
||||
assetUnitPriceEntity.setType(10);
|
||||
exportEntities.add(assetUnitPriceEntity);
|
||||
ExcelExportEntity assetQuantityEntity = new ExcelExportEntity("数量(台/件)", "assetQuantity", 20);
|
||||
assetUnitPriceEntity.setType(10);
|
||||
exportEntities.add(assetQuantityEntity);
|
||||
exportEntities.add(new ExcelExportEntity("开始使用日期", "assetUsedDate", 30));
|
||||
exportEntities.add(new ExcelExportEntity("预计报废时间", "assetRetiredAssetsDate", 30));
|
||||
exportEntities.add(new ExcelExportEntity("责任人", "assetUseUserName", 30));
|
||||
exportEntities.add(new ExcelExportEntity("使用/管理部门", "assetUseUnionName", 30));
|
||||
exportEntities.add(new ExcelExportEntity("存放地点", "assetStorageLocation", 30));
|
||||
exportEntities.add(new ExcelExportEntity("使用状况", "assetUsageStateName", 30));
|
||||
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, list);
|
||||
CommonDownloadUtil.download("资产台账.xlsx", workbook, response);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
package com.budwk.app.zhgh.asset.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.zhgh.asset.model.Asset;
|
||||
import com.budwk.app.zhgh.asset.model.AssetStocktaking;
|
||||
import com.budwk.app.zhgh.asset.param.AssetPageForm;
|
||||
import com.budwk.app.zhgh.asset.service.AssetStocktakingService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2025/7/17 16:06
|
||||
* @description 资产盘点
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/asset/stocktaking")
|
||||
@Ok("json:full")
|
||||
@Slf4j
|
||||
@Api(tags = "资产盘点管理")
|
||||
public class AssetStocktakingController {
|
||||
|
||||
|
||||
@Inject
|
||||
private AssetStocktakingService assetStocktakingService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/asset/stocktaking/index.html")
|
||||
@SaCheckPermission("asset.stocktaking")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("分页查询")
|
||||
@SaCheckPermission("asset.stocktaking")
|
||||
public Result pageData(AssetPageForm pageForm) {
|
||||
Sql sql = assetStocktakingService.getSql(pageForm);
|
||||
Pagination pagination = assetStocktakingService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("资产盘点提交")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(type = "AssetStocktaking", tag = "资产盘点", msg = "提交了一条资产盘点信息")
|
||||
@SaCheckPermission("asset.stocktaking")
|
||||
public Result doSubmit(AssetStocktaking assetStocktaking) {
|
||||
|
||||
assetStocktakingService.doSubmit(assetStocktaking);
|
||||
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("删除资产盘点")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(type = "AssetStocktaking", tag = "资产盘点", msg = "删除了一条资产盘点信息")
|
||||
@SaCheckPermission("asset.stocktaking")
|
||||
public Result doDelete(String id,String assetStocktakingPlanId) {
|
||||
assetStocktakingService.doDelete(id,assetStocktakingPlanId);
|
||||
return Result.success();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
package com.budwk.app.zhgh.asset.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
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.zhgh.asset.model.AssetStocktakingPlan;
|
||||
import com.budwk.app.zhgh.asset.param.AssetPageForm;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2025/7/17 14:40
|
||||
* @description 资产盘点计划
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/asset/stocktakingPlan")
|
||||
@Ok("json:full")
|
||||
@Slf4j
|
||||
@Api(tags = "资产折旧管理")
|
||||
public class AssetStocktakingPlanController {
|
||||
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/asset/stocktakingPlan/index.html")
|
||||
@SaCheckPermission("asset.stocktakingPlan")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("分页查询")
|
||||
@SaCheckPermission("asset.stocktakingPlan")
|
||||
public Result pageData(PageForm pageForm, Integer year) {
|
||||
Sql sql = Sqls.create("""
|
||||
select * from asset_stocktaking_plan $condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("year", "=", year);
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("提交资产盘点计划/新增/编辑")
|
||||
@SLog(type = "asset", tag = "资产管理", msg = "提交资产盘点计划/新增/编辑")
|
||||
@SaCheckPermission("asset.stocktakingPlan")
|
||||
public Result doSubmit(AssetStocktakingPlan assetStocktakingPlan) {
|
||||
baseService.insertOrUpdate(assetStocktakingPlan);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("资产盘点计划删除")
|
||||
@SLog(type = "asset", tag = "资产管理", msg = "删除了一条资产盘点计划")
|
||||
@SaCheckPermission("asset.stocktakingPlan")
|
||||
public Result doDelete(String id) {
|
||||
baseService.dao().delete(AssetStocktakingPlan.class, id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("按年度查询资产盘点计划")
|
||||
@SaCheckPermission("asset.stocktakingPlan")
|
||||
public Result queryStocktakingPlan(Integer year) {
|
||||
List<AssetStocktakingPlan> planList = baseService.dao().query(AssetStocktakingPlan.class, Cnd.NEW().andEX(AssetStocktakingPlan::getYear, "=", year));
|
||||
return Result.success(planList);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,142 @@
|
||||
package com.budwk.app.zhgh.asset.model;
|
||||
|
||||
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.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2025/7/15 11:26
|
||||
* @description 资产
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Table("asset")
|
||||
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||
@Comment("资产信息表")
|
||||
public class Asset extends BaseModel implements Serializable {
|
||||
|
||||
|
||||
@Column
|
||||
@Name
|
||||
@Comment("id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Prev(els = {@EL("uuid()")})
|
||||
private String id;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("资产编号")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String assetNumber;
|
||||
|
||||
@Column
|
||||
@Comment("资产名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String assetName;
|
||||
|
||||
@Column
|
||||
@Comment("资产类别Id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String assetCategoryId;
|
||||
|
||||
@Column
|
||||
@Comment("资产规格型号")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String assetSpecs;
|
||||
|
||||
@Column
|
||||
@Comment("供应商名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String assetSupplierName;
|
||||
|
||||
@Column
|
||||
@Comment("采购方式")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String assetFundingSubjectName;
|
||||
|
||||
@Column
|
||||
@Comment("用途")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String assetPurposeName;
|
||||
|
||||
@Column
|
||||
@Comment("单价")
|
||||
@ColDefine(customType = "decimal(6,2)")
|
||||
private BigDecimal assetUnitPrice;
|
||||
|
||||
@Column
|
||||
@Comment("数量")
|
||||
@ColDefine(type = ColType.INT)
|
||||
private Integer assetQuantity;
|
||||
|
||||
@Column
|
||||
@Comment("资产类型(1.校工会2.分工会)")
|
||||
@ColDefine(type = ColType.INT)
|
||||
private Integer assetTypeCode;
|
||||
|
||||
@Column
|
||||
@Comment("开始使用日期")
|
||||
@ColDefine(type = ColType.DATE)
|
||||
private Date assetUsedDate;
|
||||
|
||||
@Column
|
||||
@Comment("报废时间")
|
||||
@ColDefine(type = ColType.DATE)
|
||||
private Date assetRetiredAssetsDate;
|
||||
|
||||
@Column
|
||||
@Comment("发票/购买信息")
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
private List<JSONObject> assetInvoiceFiles;
|
||||
|
||||
@Column
|
||||
@Comment("资产图片")
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
private List<JSONObject> assetFiles;
|
||||
|
||||
@Column
|
||||
@Comment("备注")
|
||||
@ColDefine(type = ColType.VARCHAR,width = 200)
|
||||
private String assetNotes;
|
||||
|
||||
@Column
|
||||
@Comment("录入人Id")
|
||||
@ColDefine(type = ColType.VARCHAR,width = 32)
|
||||
private String applyUserId;
|
||||
|
||||
@Column
|
||||
@Comment("使用状况")
|
||||
@ColDefine(type = ColType.VARCHAR,width = 30)
|
||||
private String assetUsageStateName;
|
||||
|
||||
@Column
|
||||
@Comment("责任人")
|
||||
@ColDefine(type = ColType.VARCHAR,width = 32)
|
||||
private String assetUseUserId;
|
||||
|
||||
@Column
|
||||
@Comment("使用/管理部门")
|
||||
@ColDefine(type = ColType.VARCHAR,width = 32)
|
||||
private String assetUseUnionId;
|
||||
|
||||
@Column
|
||||
@Comment("使用/管理部门")
|
||||
@ColDefine(type = ColType.VARCHAR,width = 30)
|
||||
private String assetUseUnionName;
|
||||
|
||||
@Column
|
||||
@Comment("存放地点")
|
||||
@ColDefine(type = ColType.VARCHAR,width = 30)
|
||||
private String assetStorageLocation;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.budwk.app.zhgh.asset.model;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2025/7/16 14:17
|
||||
* @description 资产类别
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Table("asset_category")
|
||||
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||
@Comment("资产类别表")
|
||||
public class AssetCategory extends BaseModel implements Serializable {
|
||||
|
||||
@Column
|
||||
@Name
|
||||
@Comment("id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Prev(els = {@EL("uuid()")})
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("内容")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
private String categoryName;
|
||||
|
||||
@Column
|
||||
@Comment("编码")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
private String categoryCode;
|
||||
|
||||
@Column
|
||||
@Comment("折旧年限(年)")
|
||||
@ColDefine(type = ColType.INT)
|
||||
private int depreciationYear;
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
package com.budwk.app.zhgh.asset.model;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2025/7/16 14:19
|
||||
* @description 资产折旧记录表
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Table("asset_depreciation_record")
|
||||
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||
@Comment("资产折旧记录表")
|
||||
public class AssetDepreciationRecord extends BaseModel implements Serializable {
|
||||
|
||||
|
||||
@Column
|
||||
@Name
|
||||
@Comment("id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Prev(els = {@EL("uuid()")})
|
||||
private String id;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("资产登记id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String assetId;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("剩余月")
|
||||
@ColDefine(type = ColType.INT)
|
||||
private Integer assetRemainingMonths;
|
||||
|
||||
@Column
|
||||
@Comment("资产全部的价值")
|
||||
@ColDefine(customType = "decimal(6,2)")
|
||||
private BigDecimal assetAllMoney;
|
||||
|
||||
@Column
|
||||
@Comment("剩余价值")
|
||||
@ColDefine(customType = "decimal(6,2)")
|
||||
private BigDecimal assetSurplusMoney;
|
||||
|
||||
@Column
|
||||
@Comment("累计折旧多少钱")
|
||||
@ColDefine(customType = "decimal(6,2)")
|
||||
private BigDecimal assetDepreciationMoney;
|
||||
|
||||
@Column
|
||||
@Comment("平均一个月多少钱")
|
||||
@ColDefine(customType = "decimal(6,2)")
|
||||
private BigDecimal assetAverageMonthMoney;
|
||||
|
||||
@Column
|
||||
@Comment("折旧到期时间")
|
||||
@ColDefine(type = ColType.DATE)
|
||||
private Date assetRetiredAssetsDate;
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
package com.budwk.app.zhgh.asset.model;
|
||||
|
||||
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.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2025/7/17 15:40
|
||||
* @description 资产盘点
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Table("asset_stocktaking")
|
||||
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||
@Comment("资产盘点表")
|
||||
public class AssetStocktaking extends BaseModel implements Serializable {
|
||||
|
||||
|
||||
@Column
|
||||
@Name
|
||||
@Comment("id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Prev(els = {@EL("uuid()")})
|
||||
private String id;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("资产登记id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String assetId;
|
||||
|
||||
@Column
|
||||
@Comment("盘点计划id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String assetStocktakingPlanId;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("旧责任人")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String oldAssetUseUserId;
|
||||
|
||||
@Column
|
||||
@Comment("旧责任人姓名")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String oldAssetUseUserName;
|
||||
|
||||
@Column
|
||||
@Comment("旧责任人工号")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String oldAssetUseLoginName;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("旧使用/管理部门")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String oldAssetUseUnionId;
|
||||
|
||||
@Column
|
||||
@Comment("旧使用/管理部门")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
private String oldAssetUseUnionName;
|
||||
|
||||
@Column
|
||||
@Comment("旧存放地点")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
private String oldAssetStorageLocation;
|
||||
|
||||
@Column
|
||||
@Comment("旧使用状况")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
private String oldAssetUsageStateName;
|
||||
|
||||
@Column
|
||||
@Comment("旧资产图片")
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
private List<JSONObject> oldAssetFiles;
|
||||
|
||||
@Column
|
||||
@Comment("旧备注")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 200)
|
||||
private String oldAssetNotes;
|
||||
|
||||
private String assetUsageStateName;
|
||||
private String assetStorageLocation;
|
||||
private String assetUseUserId;
|
||||
private String assetNotes;
|
||||
private List<JSONObject> assetFiles;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.budwk.app.zhgh.asset.model;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2025/7/17 12:11
|
||||
* @description 资产盘点
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Table("asset_stocktaking_plan")
|
||||
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||
@Comment("资产盘点计划表")
|
||||
public class AssetStocktakingPlan extends BaseModel implements Serializable {
|
||||
|
||||
@Column
|
||||
@Name
|
||||
@Comment("id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Prev(els = {@EL("uuid()")})
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("年度")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
private String year;
|
||||
|
||||
@Column
|
||||
@Comment("开始时间")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
private String startDate;
|
||||
|
||||
@Column
|
||||
@Comment("时间")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
private String endDate;
|
||||
|
||||
@Column
|
||||
@Comment("说明")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 300)
|
||||
private String note;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.budwk.app.zhgh.asset.param;
|
||||
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2025/7/16 14:43
|
||||
* @description 资产查询pageForm
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Data
|
||||
public class AssetPageForm extends PageForm {
|
||||
|
||||
|
||||
|
||||
//资产类型(1.校工会2.分工会)
|
||||
private Integer assetTypeCode;
|
||||
//资产类别Id
|
||||
private String assetCategoryId;
|
||||
//使用状况
|
||||
private String assetUsageStateName;
|
||||
//使用/管理部门
|
||||
private String assetUseUnionId;
|
||||
//盘点时间段
|
||||
private String assetStocktakingPlanId;
|
||||
//是否盘点
|
||||
private Boolean isStocktaking;
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.budwk.app.zhgh.asset.service;
|
||||
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.asset.model.AssetDepreciationRecord;
|
||||
import com.budwk.app.zhgh.asset.param.AssetPageForm;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
public interface AssetDepreciationRecordService extends BaseService<AssetDepreciationRecord> {
|
||||
|
||||
|
||||
/**
|
||||
*计算折旧记录
|
||||
* @param assetUnitPrice 单价
|
||||
* @param assetQuantity 数量
|
||||
* @param assetUsedDate 开始使用日期
|
||||
* @param assetRetiredAssetsDate 预计折旧到期时间
|
||||
* @return
|
||||
*/
|
||||
AssetDepreciationRecord initAssetDepreciationRecord(BigDecimal assetUnitPrice,Integer assetQuantity,Date assetUsedDate, Date assetRetiredAssetsDate);
|
||||
|
||||
|
||||
|
||||
|
||||
Sql getSql(AssetPageForm pageForm);
|
||||
|
||||
void doDepreciation();
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.budwk.app.zhgh.asset.service;
|
||||
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.asset.model.Asset;
|
||||
import com.budwk.app.zhgh.asset.param.AssetPageForm;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
public interface AssetService extends BaseService<Asset> {
|
||||
|
||||
|
||||
Sql getSql(AssetPageForm pageForm);
|
||||
|
||||
NutMap findOne(String id);
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.budwk.app.zhgh.asset.service;
|
||||
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.asset.model.AssetStocktaking;
|
||||
import com.budwk.app.zhgh.asset.param.AssetPageForm;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
|
||||
public interface AssetStocktakingService extends BaseService<AssetStocktaking> {
|
||||
|
||||
|
||||
Sql getSql(AssetPageForm pageForm);
|
||||
|
||||
void doSubmit(AssetStocktaking assetStocktaking);
|
||||
void doDelete(String id,String assetStocktakingPlanId);
|
||||
}
|
||||
+192
@@ -0,0 +1,192 @@
|
||||
package com.budwk.app.zhgh.asset.service.impl;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.asset.model.Asset;
|
||||
import com.budwk.app.zhgh.asset.model.AssetDepreciationRecord;
|
||||
import com.budwk.app.zhgh.asset.param.AssetPageForm;
|
||||
import com.budwk.app.zhgh.asset.service.AssetDepreciationRecordService;
|
||||
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.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2025/7/16 14:30
|
||||
* @description
|
||||
*/
|
||||
@IocBean(args = {"refer:dao"})
|
||||
public class AssetDepreciationRecordServiceImpl extends BaseServiceImpl<AssetDepreciationRecord> implements AssetDepreciationRecordService {
|
||||
public AssetDepreciationRecordServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AssetDepreciationRecord initAssetDepreciationRecord(BigDecimal assetUnitPrice, Integer assetQuantity, Date assetUsedDate, Date assetRetiredAssetsDate) {
|
||||
// 将 Date 转换为 LocalDate
|
||||
LocalDate assetUsedDateLocalDate = assetUsedDate.toInstant()
|
||||
.atZone(ZoneId.systemDefault())
|
||||
.toLocalDate();
|
||||
LocalDate assetRetiredAssetsDateLocalDate = assetRetiredAssetsDate.toInstant()
|
||||
.atZone(ZoneId.systemDefault())
|
||||
.toLocalDate();
|
||||
|
||||
// 计算资产使用时间到折旧到期时间多少个月
|
||||
long wholeMonth = ChronoUnit.MONTHS.between(assetUsedDateLocalDate, assetRetiredAssetsDateLocalDate);
|
||||
//计算资产使用时间到现在使用了几个月
|
||||
long usedMonth = ChronoUnit.MONTHS.between(assetUsedDateLocalDate, LocalDate.now());
|
||||
AssetDepreciationRecord record = new AssetDepreciationRecord();
|
||||
//如果折旧到期时间小于现在时间直接设为0
|
||||
if (assetRetiredAssetsDateLocalDate.isBefore(LocalDate.now())) {
|
||||
//预计折旧到期时间
|
||||
record.setAssetRetiredAssetsDate(assetRetiredAssetsDate);
|
||||
//资产剩余的月
|
||||
record.setAssetRemainingMonths(0);
|
||||
//资产全部的金额
|
||||
record.setAssetAllMoney(assetUnitPrice.multiply(new BigDecimal(assetQuantity)));
|
||||
//资产平均每月价值
|
||||
record.setAssetAverageMonthMoney(record.getAssetAllMoney().divide(new BigDecimal(wholeMonth), 2, RoundingMode.DOWN));
|
||||
//剩余价值
|
||||
record.setAssetSurplusMoney(BigDecimal.ZERO);
|
||||
record.setAssetDepreciationMoney(assetUnitPrice.multiply(new BigDecimal(assetQuantity)));
|
||||
return record;
|
||||
} else if (wholeMonth - usedMonth >= 0) {
|
||||
//预计折旧到期时间
|
||||
record.setAssetRetiredAssetsDate(assetRetiredAssetsDate);
|
||||
//资产剩余的月
|
||||
record.setAssetRemainingMonths((int) (wholeMonth - usedMonth < 0 ? 0 : wholeMonth - usedMonth));
|
||||
//资产全部的金额
|
||||
record.setAssetAllMoney(assetUnitPrice.multiply(new BigDecimal(assetQuantity)));
|
||||
//资产平均每月价值
|
||||
record.setAssetAverageMonthMoney(record.getAssetAllMoney().divide(new BigDecimal(wholeMonth), 2, RoundingMode.DOWN));
|
||||
//剩余价值
|
||||
if (usedMonth == 0) {
|
||||
//如果等于0代表一个月都没用到直接设为全部的金额
|
||||
record.setAssetSurplusMoney(assetUnitPrice.multiply(new BigDecimal(assetQuantity)));
|
||||
} else {
|
||||
record.setAssetSurplusMoney(record.getAssetAverageMonthMoney().multiply(BigDecimal.valueOf(record.getAssetRemainingMonths())));
|
||||
}
|
||||
//累计折旧多少钱
|
||||
record.setAssetDepreciationMoney(record.getAssetAverageMonthMoney().multiply(BigDecimal.valueOf(usedMonth)));
|
||||
return record;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sql getSql(AssetPageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
t2.*,
|
||||
t1.assetAllMoney,
|
||||
t1.assetSurplusMoney,
|
||||
t1.assetDepreciationMoney,
|
||||
IFNULL(t3.depreciationYear, 0) * 12 AS assetUsageMonth,
|
||||
t3.categoryName,
|
||||
t4.username AS assetUseUserName
|
||||
FROM
|
||||
asset_depreciation_record t1
|
||||
LEFT JOIN `asset` t2 ON t2.id = t1.assetId
|
||||
LEFT JOIN asset_category t3 ON t3.id = t2.assetCategoryId
|
||||
LEFT JOIN sys_user t4 ON t4.id = t2.assetUseUserId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup group = new SqlExpressionGroup();
|
||||
group.orLike("t2.assetNumber", pageForm.getSearchKeyword());
|
||||
group.orLike("t2.assetName", pageForm.getSearchKeyword());
|
||||
cnd.and(group);
|
||||
}
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
cnd.and("t2.assetUseUnionId", "=", SecurityUtil.getUnionId());
|
||||
}
|
||||
cnd.andEX("t2.assetUseUnionId", "=", pageForm.getAssetUseUnionId());
|
||||
cnd.andEX("t2.assetCategoryId", "=", pageForm.getAssetCategoryId());
|
||||
cnd.andEX("t2.assetTypeCode", "=", pageForm.getAssetTypeCode());
|
||||
cnd.andEX("t2.assetUsageStateName", "=", pageForm.getAssetUsageStateName());
|
||||
sql.setCondition(cnd);
|
||||
return sql;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doDepreciation() {
|
||||
//查询所有资产中剩余价值不等于0的
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
t2.*,
|
||||
t1.assetUnitPrice,
|
||||
t1.assetQuantity,
|
||||
t1.assetUsedDate,
|
||||
t1.assetUsageStateName
|
||||
FROM
|
||||
`asset` t1
|
||||
LEFT JOIN asset_depreciation_record t2 ON t1.id = t2.assetId
|
||||
WHERE
|
||||
t2.assetSurplusMoney > 0
|
||||
""");
|
||||
List<NutMap> assetList = listMap(sql);
|
||||
|
||||
//找出可以折旧的资产id
|
||||
List<String> assetIds = assetList.stream().map(v -> v.getString("assetId")).toList();
|
||||
|
||||
//根据上面的id找出折旧表里面的记录
|
||||
List<AssetDepreciationRecord> depreciationRecordList = query(Cnd.where("assetId", "in", assetIds));
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
depreciationRecordList.forEach(record -> {
|
||||
//找出该资产的使用状况是不是正常的
|
||||
NutMap map = assetList.stream().filter(v -> v.getString("assetId").equals(record.getAssetId())).findFirst().orElse(null);
|
||||
LocalDate assetRetiredAssetsLocalDate = LocalDate.parse(map.getString("assetRetiredAssetsDate"), formatter);
|
||||
|
||||
|
||||
if (map != null && !"正常".equals(map.getString("assetUsageStateName"))) {
|
||||
//如果这个资产不是正常的就直接把剩余价值设为0,剩余月份也设为0
|
||||
record.setAssetSurplusMoney(BigDecimal.ZERO);
|
||||
record.setAssetRemainingMonths(0);
|
||||
} else if (assetRetiredAssetsLocalDate.isBefore(LocalDate.now())) {
|
||||
//如果这个资产折旧到期时间小于现在时间直接设为0
|
||||
record.setAssetSurplusMoney(BigDecimal.ZERO);
|
||||
record.setAssetRemainingMonths(0);
|
||||
} else {
|
||||
//转换时间为我上面方法所需要的类型
|
||||
BigDecimal assetUnitPrice = new BigDecimal(map.getString("assetUnitPrice"));
|
||||
|
||||
int assetQuantity = map.getInt("assetQuantity");
|
||||
|
||||
LocalDateTime assetUsedLocalDateTime = LocalDateTime.parse(map.getString("assetUsedDate"), formatter);
|
||||
Date assetUsedDate = Date.from(assetUsedLocalDateTime.atZone(ZoneId.systemDefault()).toInstant());
|
||||
|
||||
LocalDateTime assetRetiredAssetsLocalDateTime = LocalDateTime.parse(map.getString("assetRetiredAssetsDate"), formatter);
|
||||
Date assetRetiredAssetsDate = Date.from(assetRetiredAssetsLocalDateTime.atZone(ZoneId.systemDefault()).toInstant());
|
||||
//算出剩余的月份和价值
|
||||
AssetDepreciationRecord inited = initAssetDepreciationRecord(assetUnitPrice, assetQuantity, assetUsedDate, assetRetiredAssetsDate);
|
||||
//如果返回空代表一个月也没使用不增加
|
||||
if (ObjectUtil.isNotEmpty(inited)) {
|
||||
record.setAssetRemainingMonths(inited.getAssetRemainingMonths());
|
||||
record.setAssetSurplusMoney(inited.getAssetSurplusMoney());
|
||||
record.setAssetDepreciationMoney(inited.getAssetDepreciationMoney());
|
||||
}
|
||||
}
|
||||
});
|
||||
update(depreciationRecordList);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
package com.budwk.app.zhgh.asset.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.asset.model.Asset;
|
||||
import com.budwk.app.zhgh.asset.model.AssetStocktaking;
|
||||
import com.budwk.app.zhgh.asset.param.AssetPageForm;
|
||||
import com.budwk.app.zhgh.asset.service.AssetService;
|
||||
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.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2025/7/16 14:28
|
||||
* @description
|
||||
*/
|
||||
@IocBean(args = {"refer:dao"})
|
||||
public class AssetServiceImpl extends BaseServiceImpl<Asset> implements AssetService {
|
||||
public AssetServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sql getSql(AssetPageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
t1.*,
|
||||
t3.categoryName,
|
||||
t4.username AS assetUseUserName
|
||||
FROM
|
||||
`asset` t1
|
||||
LEFT JOIN asset_depreciation_record t2 ON t1.id = t2.assetId
|
||||
LEFT JOIN asset_category t3 ON t3.id = t1.assetCategoryId
|
||||
LEFT JOIN sys_user t4 ON t4.id = t1.assetUseUserId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup group = new SqlExpressionGroup();
|
||||
group.orLike("t1.assetNumber", pageForm.getSearchKeyword());
|
||||
group.orLike("t1.assetName", pageForm.getSearchKeyword());
|
||||
cnd.and(group);
|
||||
}
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
cnd.and("t1.assetUseUnionId", "=", SecurityUtil.getUnionId());
|
||||
}
|
||||
cnd.andEX("t1.assetUseUnionId", "=", pageForm.getAssetUseUnionId());
|
||||
cnd.andEX("t1.assetCategoryId", "=", pageForm.getAssetCategoryId());
|
||||
cnd.andEX("t1.assetTypeCode", "=", pageForm.getAssetTypeCode());
|
||||
cnd.andEX("t1.assetUsageStateName", "=", pageForm.getAssetUsageStateName());
|
||||
sql.setCondition(cnd);
|
||||
return sql;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NutMap findOne(String id) {
|
||||
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
t1.*,
|
||||
t3.categoryName AS assetCategoryName,
|
||||
t3.depreciationYear AS assetDepreciationYear,
|
||||
t4.username AS assetUseUserName
|
||||
FROM
|
||||
`asset` t1
|
||||
LEFT JOIN asset_depreciation_record t2 ON t1.id = t2.assetId
|
||||
LEFT JOIN asset_category t3 ON t3.id = t1.assetCategoryId
|
||||
LEFT JOIN sys_user t4 ON t4.id = t1.assetUseUserId
|
||||
WHERE
|
||||
t1.id = @id
|
||||
""").setParam("id",id);
|
||||
NutMap nutMap = (NutMap) dao().execute(sql.setCallback(Sqls.callback.map())).getResult();
|
||||
|
||||
nutMap.setv("assetStocktakingList", dao().query(AssetStocktaking.class,
|
||||
Cnd.where("assetId", "=", id)));
|
||||
return nutMap;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
package com.budwk.app.zhgh.asset.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
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.asset.model.Asset;
|
||||
import com.budwk.app.zhgh.asset.model.AssetStocktaking;
|
||||
import com.budwk.app.zhgh.asset.param.AssetPageForm;
|
||||
import com.budwk.app.zhgh.asset.service.AssetStocktakingService;
|
||||
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.dao.util.cri.Static;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2025/7/17 16:08
|
||||
* @description
|
||||
*/
|
||||
@IocBean(args = {"refer:dao"})
|
||||
public class AssetStocktakingServiceImpl extends BaseServiceImpl<AssetStocktaking> implements AssetStocktakingService {
|
||||
public AssetStocktakingServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sql getSql(AssetPageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
t1.*,
|
||||
t3.categoryName,
|
||||
t4.username AS assetUseUserName,
|
||||
COUNT(t5.assetId) AS isStocktaking
|
||||
FROM
|
||||
`asset` t1
|
||||
LEFT JOIN asset_depreciation_record t2 ON t1.id = t2.assetId
|
||||
LEFT JOIN asset_category t3 ON t3.id = t1.assetCategoryId
|
||||
LEFT JOIN sys_user t4 ON t4.id = t1.assetUseUserId
|
||||
LEFT JOIN asset_stocktaking t5 ON t5.assetId = t1.id
|
||||
AND t5.assetStocktakingPlanId =@assetStocktakingPlanId
|
||||
$condition
|
||||
$stocktakingCnd
|
||||
""").setParam("assetStocktakingPlanId", pageForm.getAssetStocktakingPlanId());
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup group = new SqlExpressionGroup();
|
||||
group.orLike("t1.assetNumber", pageForm.getSearchKeyword());
|
||||
group.orLike("t1.assetName", pageForm.getSearchKeyword());
|
||||
cnd.and(group);
|
||||
}
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
cnd.and("t1.assetUseUnionId", "=", SecurityUtil.getUnionId());
|
||||
}
|
||||
if (pageForm.getIsStocktaking() != null) {
|
||||
sql.setVar("stocktakingCnd", "HAVING COUNT(t5.assetId) " + (pageForm.getIsStocktaking() ? ">" : "=") + "0");
|
||||
}
|
||||
cnd.andEX("t1.assetUseUnionId", "=", pageForm.getAssetUseUnionId());
|
||||
cnd.andEX("t1.assetCategoryId", "=", pageForm.getAssetCategoryId());
|
||||
cnd.andEX("t1.assetTypeCode", "=", pageForm.getAssetTypeCode());
|
||||
cnd.andEX("t1.assetUsageStateName", "=", pageForm.getAssetUsageStateName());
|
||||
sql.setCondition(cnd);
|
||||
return sql;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doSubmit(AssetStocktaking assetStocktaking) {
|
||||
|
||||
Asset asset = dao().fetch(Asset.class, assetStocktaking.getAssetId());
|
||||
//插入盘点表记录上一次的数据
|
||||
//查询旧的责任人是谁
|
||||
View_user oldUser = dao().fetch(View_user.class, Cnd.where("id", "=", asset.getAssetUseUserId()));
|
||||
assetStocktaking.setOldAssetFiles(asset.getAssetFiles());
|
||||
assetStocktaking.setOldAssetNotes(asset.getAssetNotes());
|
||||
assetStocktaking.setOldAssetStorageLocation(asset.getAssetStorageLocation());
|
||||
assetStocktaking.setOldAssetUseUserId(asset.getAssetUseUserId());
|
||||
assetStocktaking.setOldAssetUseUserName(oldUser.getUsername());
|
||||
assetStocktaking.setOldAssetUseLoginName(oldUser.getLoginname());
|
||||
assetStocktaking.setOldAssetUseUnionId(asset.getAssetUseUnionId());
|
||||
assetStocktaking.setOldAssetUseUnionName(asset.getAssetUseUnionName());
|
||||
assetStocktaking.setOldAssetUsageStateName(asset.getAssetUsageStateName());
|
||||
insert(assetStocktaking);
|
||||
//跟新资产信息表,资产信息表始终是最新的数据
|
||||
View_user user = dao().fetch(View_user.class, Cnd.where("id", "=", assetStocktaking.getAssetUseUserId()));
|
||||
asset.setAssetFiles(assetStocktaking.getAssetFiles());
|
||||
asset.setAssetNotes(assetStocktaking.getAssetNotes());
|
||||
asset.setAssetStorageLocation(assetStocktaking.getAssetStorageLocation());
|
||||
asset.setAssetUseUserId(assetStocktaking.getAssetUseUserId());
|
||||
asset.setAssetUseUnionId(user.getUnionId());
|
||||
asset.setAssetUseUnionName(user.getUnionName());
|
||||
asset.setAssetUsageStateName(assetStocktaking.getAssetUsageStateName());
|
||||
dao().update(asset);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doDelete(String id, String assetStocktakingPlanId) {
|
||||
//找出盘点的信息,修改到资产信息表
|
||||
AssetStocktaking assetStocktaking = fetch(Cnd.where("assetId", "=", id)
|
||||
.and("assetStocktakingPlanId", "=", assetStocktakingPlanId));
|
||||
Asset asset = dao().fetch(Asset.class, assetStocktaking.getAssetId());
|
||||
asset.setAssetFiles(assetStocktaking.getOldAssetFiles());
|
||||
asset.setAssetNotes(assetStocktaking.getOldAssetNotes());
|
||||
asset.setAssetStorageLocation(assetStocktaking.getOldAssetStorageLocation());
|
||||
asset.setAssetUseUserId(assetStocktaking.getOldAssetUseUserId());
|
||||
asset.setAssetUseUnionId(assetStocktaking.getOldAssetUseUnionId());
|
||||
asset.setAssetUseUnionName(assetStocktaking.getOldAssetUseUnionName());
|
||||
asset.setAssetUsageStateName(assetStocktaking.getOldAssetUsageStateName());
|
||||
dao().update(asset);
|
||||
//删除盘点信息
|
||||
clear(Cnd.where("assetId", "=", id)
|
||||
.and("assetStocktakingPlanId", "=", assetStocktakingPlanId));
|
||||
|
||||
}
|
||||
}
|
||||
+26
-16
@@ -1,15 +1,14 @@
|
||||
package com.budwk.app.zhgh.activity.qsv.controller;
|
||||
package com.budwk.app.zhgh.dayofficework.qsv.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
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.zhgh.activity.qsv.models.QsvActivity;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvOption;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvSubject;
|
||||
import com.budwk.app.zhgh.activity.qsv.service.QsvActivityService;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvActivity;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvOption;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvSubject;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.service.QsvActivityService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
@@ -28,6 +27,7 @@ import java.util.List;
|
||||
@IocBean
|
||||
@At("/platform/qsv/activity")
|
||||
@Ok("json:full")
|
||||
@ApiOperation("问卷调查管理")
|
||||
public class QsvActivityController {
|
||||
|
||||
@Inject
|
||||
@@ -36,16 +36,17 @@ public class QsvActivityController {
|
||||
private QsvActivityService qsvActivityService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/activity/qsv/activity/index.html")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/qsv/activity/index.html")
|
||||
@SaCheckPermission("qsv.activity")
|
||||
public void index() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
// 分页查询
|
||||
@At
|
||||
@SaCheckPermission("qsv.activity")
|
||||
@ApiOperation("分页查询")
|
||||
public Result pageData(@Valid PageForm pageForm, Integer year,String title) {
|
||||
public Result pageData(@Valid PageForm pageForm, Integer year, String title) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("YEAR(startTime)", "=", year);
|
||||
cnd.and(Cnd.likeEX("title",title));
|
||||
@@ -54,9 +55,11 @@ public class QsvActivityController {
|
||||
}
|
||||
|
||||
|
||||
// 保存问卷基础信息
|
||||
@At
|
||||
@SaCheckPermission("qsv.activity")
|
||||
@ApiOperation("保存问卷基础信息")
|
||||
@SLog(type = "qsv.activity", tag = "保存问卷基础信息", msg = "保存问卷基础信息")
|
||||
public Result save(QsvActivity qsvActivity) {
|
||||
if (qsvActivity.getCategory().equals("QUIZ")) {
|
||||
if (qsvActivity.getMode().equals("SCHEDULED")) {
|
||||
@@ -76,20 +79,25 @@ public class QsvActivityController {
|
||||
return Result.success(activity);
|
||||
}
|
||||
|
||||
// 删除问卷
|
||||
@At
|
||||
@SaCheckPermission("qsv.activity")
|
||||
@ApiOperation("删除问卷")
|
||||
@SLog(type = "qsv.activity", tag = "删除问卷", msg = "删除问卷")
|
||||
public Result delete(@Valid String id) {
|
||||
dao.delete(QsvActivity.class, id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
// 保存问卷题目
|
||||
@At
|
||||
@SaCheckPermission("qsv.activity")
|
||||
@ApiOperation("保存问卷题目")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("保存问卷题目")
|
||||
@SLog(type = "qsv.activity", tag = "保存问卷题目", msg = "保存问卷题目")
|
||||
public Result saveSubjects(@Param("activityId") @Valid String activityId, @Param("subjects") QsvSubject[] qsvSubjects) {
|
||||
List<QsvSubject> subjects = dao.query(QsvSubject.class, Cnd.where(QsvSubject::getActivityId, "=", activityId));
|
||||
List<QsvSubject> subjects = dao.query(QsvSubject.class, Cnd.where("activityId", "=", activityId));
|
||||
List<String> subjectIds = subjects.stream().map(QsvSubject::getId).toList();
|
||||
|
||||
//新题目
|
||||
@@ -111,7 +119,7 @@ public class QsvActivityController {
|
||||
List<QsvOption> newOptions = qsvSubject.getOptions();
|
||||
List<String> optionIds = newOptions.stream().map(QsvOption::getId).toList();
|
||||
|
||||
List<QsvOption> oldOptions = dao.query(QsvOption.class, Cnd.where(QsvOption::getSubjectId, "=", qsvSubject.getId()));
|
||||
List<QsvOption> oldOptions = dao.query(QsvOption.class, Cnd.where("subjectId", "=", qsvSubject.getId()));
|
||||
List<String> oldOptionIds = oldOptions.stream().map(QsvOption::getId).toList();
|
||||
|
||||
|
||||
@@ -127,7 +135,7 @@ public class QsvActivityController {
|
||||
List<String> correctOptionIds = newOptions.stream().filter(QsvOption::getIsCorrect).map(QsvOption::getId).toList();
|
||||
qsvSubject.setCorrectAnswer(correctOptionIds);
|
||||
} else {
|
||||
dao.clear(QsvOption.class, Cnd.where(QsvOption::getSubjectId, "=", qsvSubject.getId()));
|
||||
dao.clear(QsvOption.class, Cnd.where("subjectId", "=", qsvSubject.getId()));
|
||||
}
|
||||
dao.update(qsvSubject);
|
||||
}
|
||||
@@ -135,12 +143,14 @@ public class QsvActivityController {
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
// 查询问卷题目
|
||||
@At
|
||||
@SaCheckPermission("qsv.activity")
|
||||
@ApiOperation("查询问卷题目")
|
||||
@SLog(type = "qsv.activity", tag = "查询问卷题目", msg = "查询问卷题目")
|
||||
public Result listSubjects(@Valid String activityId) {
|
||||
List<QsvSubject> subjects = dao.query(QsvSubject.class, Cnd.where(QsvSubject::getActivityId, "=", activityId).asc(QsvSubject::getSortNum));
|
||||
dao.fetchLinks(subjects, "options",Cnd.NEW().asc(QsvOption::getSortNum));
|
||||
List<QsvSubject> subjects = dao.query(QsvSubject.class, Cnd.where("activityId", "=", activityId).asc("sortNum"));
|
||||
dao.fetchLinks(subjects, "options",Cnd.NEW().asc("sortNum"));
|
||||
return Result.success(subjects);
|
||||
}
|
||||
|
||||
+12
-13
@@ -1,21 +1,16 @@
|
||||
package com.budwk.app.zhgh.activity.qsv.controller;
|
||||
package com.budwk.app.zhgh.dayofficework.qsv.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
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.zhgh.activity.qsv.models.QsvActivity;
|
||||
import com.budwk.app.zhgh.activity.qsv.param.QsvQuizRankPageForm;
|
||||
import com.budwk.app.zhgh.activity.qsv.service.QsvQuizRankService;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvActivity;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.param.QsvQuizRankPageForm;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.service.QsvQuizRankService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
@@ -26,6 +21,7 @@ import java.util.List;
|
||||
@IocBean
|
||||
@At("/platform/qsv/quizRank")
|
||||
@Ok("json:full")
|
||||
@ApiOperation("答题得分统计")
|
||||
public class QsvQuizRankController {
|
||||
|
||||
@Inject
|
||||
@@ -34,25 +30,27 @@ public class QsvQuizRankController {
|
||||
private QsvQuizRankService qsvQuizRankService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/activity/qsv/quiz/rank.html")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/qsv/quiz/rank.html")
|
||||
@SaCheckPermission("qsv.quiz.rank")
|
||||
public void index() {
|
||||
|
||||
}
|
||||
|
||||
// 根据年度查询问卷
|
||||
@At
|
||||
@SaCheckPermission("qsv.quiz.rank")
|
||||
@ApiOperation("根据年度查询问卷")
|
||||
public Result listQuiz(Integer year) {
|
||||
Cnd cnd = Cnd.where(QsvActivity::getCategory, "=", "QUIZ");
|
||||
Cnd cnd = Cnd.where("category", "=", "QUIZ");
|
||||
cnd.andEX("YEAR(startTime)", "=", year);
|
||||
cnd.desc(QsvActivity::getCreatedAt);
|
||||
cnd.desc("category");
|
||||
List<QsvActivity> list = dao.query(QsvActivity.class, cnd);
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("qsv.quiz.rank")
|
||||
@ApiOperation("分页查询")
|
||||
public Result pageData(@Valid QsvQuizRankPageForm pageForm) {
|
||||
Pagination pagination = qsvQuizRankService.pageData(pageForm);
|
||||
return Result.success(pagination);
|
||||
@@ -61,7 +59,8 @@ public class QsvQuizRankController {
|
||||
@At
|
||||
@Ok("void")
|
||||
@SaCheckPermission("qsv.quiz.rank")
|
||||
public void exportXlsx(@Valid QsvQuizRankPageForm pageForm, HttpServletResponse response) {
|
||||
@ApiOperation("导出数据")
|
||||
public void exportXlsx(QsvQuizRankPageForm pageForm, HttpServletResponse response) {
|
||||
qsvQuizRankService.exportXlsx(pageForm, response);
|
||||
}
|
||||
|
||||
+31
-21
@@ -1,24 +1,18 @@
|
||||
package com.budwk.app.zhgh.activity.qsv.controller;
|
||||
package com.budwk.app.zhgh.dayofficework.qsv.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
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.zhgh.activity.qsv.models.QsvActivity;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvSubject;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvUserAnswerRecord;
|
||||
import com.budwk.app.zhgh.activity.qsv.param.QsvQuizRankPageForm;
|
||||
import com.budwk.app.zhgh.activity.qsv.service.QsvActivityService;
|
||||
import com.budwk.app.zhgh.activity.qsv.service.QsvQuizRankService;
|
||||
import com.budwk.app.zhgh.activity.qsv.service.QsvSurveyService;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvUserAnswerRecord;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.service.QsvActivityService;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.service.QsvSurveyService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
@@ -27,13 +21,12 @@ import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/qsv/survey")
|
||||
@Ok("json:full")
|
||||
@ApiOperation("调查统计")
|
||||
public class QsvSurveyController {
|
||||
|
||||
@Inject
|
||||
@@ -44,7 +37,7 @@ public class QsvSurveyController {
|
||||
private QsvSurveyService qsvSurveyService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/activity/qsv/survey/index.html")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/qsv/survey/index.html")
|
||||
@SaCheckPermission("qsv.survey")
|
||||
public void index() {
|
||||
|
||||
@@ -53,50 +46,67 @@ public class QsvSurveyController {
|
||||
|
||||
@At
|
||||
@SaCheckPermission("qsv.survey")
|
||||
@ApiOperation("分页查询")
|
||||
public Result pageData(@Valid PageForm pageForm, Integer year) {
|
||||
Cnd cnd = Cnd.where(QsvActivity::getCategory, "=", "SURVEY");
|
||||
Cnd cnd = Cnd.where("category", "=", "SURVEY");
|
||||
cnd.andEX("YEAR(startTime)", "=", year);
|
||||
cnd.desc(QsvActivity::getCreatedAt);
|
||||
cnd.desc("category");
|
||||
Pagination pagination = qsvActivityService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), cnd);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("qsv.survey")
|
||||
@ApiOperation("报告")
|
||||
@ApiOperation("生成报告")
|
||||
public Result report(@Valid String activityId) {
|
||||
List<NutMap> report = qsvSurveyService.report(activityId);
|
||||
return Result.success(report);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@SaCheckPermission("qsv.survey")
|
||||
@ApiOperation("导出报告")
|
||||
public void exportReportXlsx(String activityId, HttpServletResponse response) {
|
||||
qsvSurveyService.exportReportXlsx(activityId, response);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("qsv.survey")
|
||||
@ApiOperation("选项选择详情")
|
||||
public Result selectOptionUsers(@Valid String activityId, @Valid String subjectId, @Valid String optionId) {
|
||||
List<QsvUserAnswerRecord> answerRecords = dao.query(QsvUserAnswerRecord.class, Cnd.where(QsvUserAnswerRecord::getActivityId, "=", activityId));
|
||||
List<QsvUserAnswerRecord> answerRecords = dao.query(QsvUserAnswerRecord.class, Cnd.where("activityId", "=", activityId));
|
||||
List<QsvUserAnswerRecord> selectOptionUsers = answerRecords.stream().filter(ext -> ObjectUtil.isNotNull(ext.getExtJson().get(subjectId, JSONObject.class)) && ext.getExtJson().get(subjectId, JSONObject.class).getJSONArray("optionIds").contains(optionId)).toList();
|
||||
return Result.success(selectOptionUsers);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("qsv.survey")
|
||||
@ApiOperation("用户答题")
|
||||
public Result userAnswer(@Valid String activityId) {
|
||||
NutMap map = qsvSurveyService.userAnswer(activityId);
|
||||
@SLog(type = "qsv.survey", tag = "用户答题", msg = "用户答了一题")
|
||||
public Result userAnswer(PageForm pageForm, @Valid String activityId) {
|
||||
NutMap map = qsvSurveyService.userAnswer(pageForm, activityId);
|
||||
return Result.success(map);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("qsv.survey")
|
||||
@ApiOperation("删除用户答题记录")
|
||||
@SLog(type = "qsv.survey", tag = "删除用户答题记录", msg = "删除用户答题记录")
|
||||
public Result deleteUserAnswer(@Valid String id) {
|
||||
dao.delete(QsvUserAnswerRecord.class, id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@SaCheckPermission("qsv.survey")
|
||||
@ApiOperation("导出用户答题记录xlsx")
|
||||
@ApiOperation("导出用户答题记录")
|
||||
public void exportUserAnswerXlsx(@Valid String activityId, HttpServletResponse response) {
|
||||
qsvSurveyService.exportUserAnswerXlsx(activityId, response);
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.budwk.app.zhgh.dayofficework.qsv.dto;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
//答题得分计算结果
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@Builder
|
||||
public class QsvCheckAnswerResult {
|
||||
|
||||
private boolean isCorrect;
|
||||
|
||||
private float score;
|
||||
|
||||
}
|
||||
+6
-12
@@ -1,13 +1,9 @@
|
||||
package com.budwk.app.zhgh.activity.qsv.h5controller;
|
||||
package com.budwk.app.zhgh.dayofficework.qsv.h5controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
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.zhgh.activity.qsv.models.QsvActivity;
|
||||
import com.budwk.app.zhgh.activity.qsv.service.QsvActivityService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.service.QsvActivityService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
@@ -27,19 +23,17 @@ public class H5QsvController {
|
||||
private QsvActivityService qsvActivityService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhghh5/activity/qsv/index.html")
|
||||
@SaCheckPermission("h5.qsv")
|
||||
@Ok("beetl:/mobile/qsv/index.html")
|
||||
public void index() {
|
||||
|
||||
}
|
||||
|
||||
// 分页查询
|
||||
@At
|
||||
@SaCheckPermission("h5.qsv")
|
||||
@ApiOperation("分页查询")
|
||||
public Result pageData(@Valid PageForm pageForm, @Valid String category) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX(QsvActivity::getCategory, "=", category);
|
||||
cnd.desc(QsvActivity::getStartTime);
|
||||
cnd.andEX("category", "=", category);
|
||||
cnd.desc("startTime");
|
||||
Pagination pagination = qsvActivityService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), cnd);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
+84
-69
@@ -1,20 +1,19 @@
|
||||
package com.budwk.app.zhgh.activity.qsv.h5controller;
|
||||
package com.budwk.app.zhgh.dayofficework.qsv.h5controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.budwk.app.base.exception.BaseException;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.activity.qsv.dto.QsvCheckAnswerResult;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvActivity;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvOption;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvSubject;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvUserAnswerRecord;
|
||||
import com.budwk.app.zhgh.activity.qsv.param.QsvAnswerParam;
|
||||
import com.budwk.app.zhgh.activity.qsv.service.QsvQuizService;
|
||||
import com.budwk.app.zhgh.activity.qsv.service.QsvUserAnswerRecordService;
|
||||
import com.budwk.app.zhgh.activity.basic.models.ActivityUserScope;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.dto.QsvCheckAnswerResult;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvActivity;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvSubject;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvUserAnswerRecord;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.param.QsvAnswerParam;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.service.QsvQuizService;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.service.QsvUserAnswerRecordService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Cnd;
|
||||
@@ -45,24 +44,28 @@ public class H5QsvQuizController {
|
||||
private QsvQuizService qsvQuizService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhghh5/activity/qsv/quiz/index.html")
|
||||
@SaCheckLogin
|
||||
@Ok("beetl:/mobile/qsv/quiz/index.html")
|
||||
public void index() {
|
||||
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("beetl:/platform/zhghh5/activity/qsv/quiz/result.html")
|
||||
@SaCheckLogin
|
||||
@Ok("beetl:/mobile/qsv/quiz/result.html")
|
||||
public void result() {
|
||||
|
||||
}
|
||||
|
||||
// 题目列表
|
||||
@At
|
||||
@SaCheckLogin
|
||||
@ApiOperation("题目列表")
|
||||
public Result subjects(@Valid String activityId) {
|
||||
QsvActivity activity = dao.fetch(QsvActivity.class, activityId);
|
||||
|
||||
int count = dao.count(ActivityUserScope.class, Cnd.where("groupId", "=", activity.getGroupId())
|
||||
.and("userId", "=", SecurityUtil.getUserId()));
|
||||
if (count != 1) {
|
||||
return Result.error("您无需参加此次答题,感谢您的关注!");
|
||||
}
|
||||
|
||||
String mode = activity.getMode();
|
||||
//能否重复答题
|
||||
Boolean repeatable = activity.getRepeatable();
|
||||
@@ -72,52 +75,54 @@ public class H5QsvQuizController {
|
||||
Integer maxAttempts = activity.getMaxAttempts();
|
||||
//题目显示模式
|
||||
String displayMode = activity.getDisplayMode();
|
||||
// 重复答题,显示提示
|
||||
Boolean repeatTips = false;
|
||||
|
||||
//最终返回的题目数据
|
||||
List<QsvSubject> resultSubjects = new ArrayList<>();
|
||||
String answerRecordId = null;
|
||||
|
||||
//查询用户的答题记录
|
||||
List<QsvUserAnswerRecord> answerRecords = dao.query(QsvUserAnswerRecord.class, Cnd.where(QsvUserAnswerRecord::getActivityId, "=", activityId)
|
||||
.and(QsvUserAnswerRecord::getUserId, "=", SecurityUtil.getUserId()));
|
||||
List<QsvUserAnswerRecord> answerRecords = dao.query(QsvUserAnswerRecord.class, Cnd.where("activityId", "=", activityId)
|
||||
.and("userId", "=", SecurityUtil.getUserId()));
|
||||
|
||||
if (activity.getEndTime().after(new Date())) {
|
||||
if (activity.getEndTime().before(new Date())) {
|
||||
//已结束 查询最新一次的答题记录
|
||||
Optional<QsvUserAnswerRecord> lastRecordOptional = answerRecords.stream().max(Comparator.comparing(QsvUserAnswerRecord::getAnswerTime));
|
||||
if (lastRecordOptional.isPresent()) {
|
||||
List<String> subjectIds = lastRecordOptional.get().getSubjectIds();
|
||||
Cnd cnd = Cnd.where(QsvSubject::getId, "in", subjectIds);
|
||||
Cnd cnd = Cnd.where("id", "in", subjectIds);
|
||||
String dynamic = subjectIds.stream().map(id -> "'" + id + "'").collect(Collectors.joining(","));
|
||||
cnd.and(new Static("1=1 ORDER BY FIELD (id," + dynamic + ")"));
|
||||
resultSubjects = dao.query(QsvSubject.class, cnd);
|
||||
answerRecordId = lastRecordOptional.get().getId();
|
||||
}else{
|
||||
//没生成过 那就看全部的题目
|
||||
List<QsvSubject> subjects = dao.query(QsvSubject.class, Cnd.where(QsvSubject::getActivityId, "=", 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()));
|
||||
answerRecordId = answerRecord.getId();
|
||||
|
||||
List<String> subjectIds = answerRecord.getSubjectIds();
|
||||
Cnd cnd = Cnd.where(QsvSubject::getId, "in", subjectIds);
|
||||
Cnd cnd = Cnd.where("id", "in", subjectIds);
|
||||
String dynamic = subjectIds.stream().map(id -> "'" + id + "'").collect(Collectors.joining(","));
|
||||
cnd.and(new Static("1=1 ORDER BY FIELD (id," + dynamic + ")"));
|
||||
resultSubjects = dao.query(QsvSubject.class, cnd);
|
||||
}
|
||||
} else {
|
||||
|
||||
if (mode.equals("REGULAR")) {
|
||||
if ("REGULAR".equals(mode)) {
|
||||
if (ObjectUtil.isEmpty(answerRecords)) {
|
||||
//首次进来生成答题记录
|
||||
if (displayMode.equals("ALL")) {
|
||||
resultSubjects = dao.query(QsvSubject.class, Cnd.where(QsvSubject::getActivityId, "=", activityId));
|
||||
if ("ALL".equals(displayMode)) {
|
||||
resultSubjects = dao.query(QsvSubject.class, Cnd.where("activityId", "=", activityId).asc("sortNum"));
|
||||
answerRecordId = qsvUserAnswerRecordService.insertRecord(activityId, resultSubjects.stream().map(QsvSubject::getId).collect(Collectors.toList())).getId();
|
||||
} else if (displayMode.equals("RANDOM")) {
|
||||
} else if ("RANDOM".equals(displayMode)) {
|
||||
//单次随机抽取题目数量
|
||||
Integer randomCount = activity.getRandomCount();
|
||||
|
||||
List<QsvSubject> subjects = dao.query(QsvSubject.class, Cnd.where(QsvSubject::getActivityId, "=", activityId));
|
||||
List<QsvSubject> subjects = dao.query(QsvSubject.class, Cnd.where("activityId", "=", activityId));
|
||||
if (subjects.size() < randomCount) {
|
||||
throw new BaseException("题目数不够,无法生成题目");
|
||||
throw new RuntimeException("题目数不够,无法生成题目");
|
||||
}
|
||||
|
||||
//从subjects里随机抽取randomCount个题目
|
||||
@@ -127,60 +132,70 @@ public class H5QsvQuizController {
|
||||
answerRecordId = answerRecord.getId();
|
||||
|
||||
List<String> subjectIds = answerRecord.getSubjectIds();
|
||||
Cnd cnd = Cnd.where(QsvSubject::getId, "in", subjectIds);
|
||||
Cnd cnd = Cnd.where("id", "in", subjectIds);
|
||||
String dynamic = subjectIds.stream().map(id -> "'" + id + "'").collect(Collectors.joining(","));
|
||||
cnd.and(new Static("1=1 ORDER BY FIELD (id," + dynamic + ")"));
|
||||
resultSubjects = dao.query(QsvSubject.class, cnd);
|
||||
}
|
||||
} else {
|
||||
if (displayMode.equals("ALL")) {
|
||||
if ("ALL".equals(displayMode)) {
|
||||
//判断能否重复答题 如果可重复要根据次数判断是否再次生成记录 不能重复直接返回最新的一次记录
|
||||
if (repeatable) {
|
||||
//已回答次数
|
||||
if (answerRecords.size() < maxAttempts) {
|
||||
//生成答题记录
|
||||
List<QsvSubject> subjects = dao.query(QsvSubject.class, Cnd.where(QsvSubject::getActivityId, "=", activityId));
|
||||
answerRecordId = qsvUserAnswerRecordService.insertRecord(activityId, subjects.stream().map(QsvSubject::getId).collect(Collectors.toList())).getId();
|
||||
QsvUserAnswerRecord answerRecord = dao.fetch(QsvUserAnswerRecord.class, answerRecordId);
|
||||
QsvUserAnswerRecord fetch = dao.fetch(QsvUserAnswerRecord.class, Cnd.where("activityId", "=", activityId)
|
||||
.and("userId", "=", SecurityUtil.getUserId()).and("isFinish", "=", false)
|
||||
.desc("randomNumber"));
|
||||
List<String> subjectIds = new ArrayList<>();
|
||||
if (fetch == null) {
|
||||
List<QsvSubject> subjects = dao.query(QsvSubject.class, Cnd.where("activityId", "=", activityId).asc("sortNum"));
|
||||
answerRecordId = qsvUserAnswerRecordService.insertRecord(activityId, subjects.stream().map(QsvSubject::getId).collect(Collectors.toList())).getId();
|
||||
QsvUserAnswerRecord answerRecord = dao.fetch(QsvUserAnswerRecord.class, answerRecordId);
|
||||
subjectIds = answerRecord.getSubjectIds();
|
||||
|
||||
List<String> subjectIds = answerRecord.getSubjectIds();
|
||||
Cnd cnd = Cnd.where(QsvSubject::getId, "in", subjectIds);
|
||||
} else {
|
||||
subjectIds = fetch.getSubjectIds();
|
||||
answerRecordId = fetch.getId();
|
||||
}
|
||||
Cnd cnd = Cnd.where("id", "in", subjectIds);
|
||||
String dynamic = subjectIds.stream().map(id -> "'" + id + "'").collect(Collectors.joining(","));
|
||||
cnd.and(new Static("1=1 ORDER BY FIELD (id," + dynamic + ")"));
|
||||
resultSubjects = dao.query(QsvSubject.class, cnd);
|
||||
repeatTips = true;
|
||||
} else {
|
||||
//已达到最大次数 返回最新一次记录
|
||||
Optional<QsvUserAnswerRecord> maxAnswerRecordOptional = answerRecords.stream().max(Comparator.comparingLong(QsvUserAnswerRecord::getRandomNumber));
|
||||
if (maxAnswerRecordOptional.isPresent()) {
|
||||
List<String> subjectIds = maxAnswerRecordOptional.get().getSubjectIds();
|
||||
Cnd cnd = Cnd.where(QsvSubject::getId, "in", subjectIds);
|
||||
Cnd cnd = Cnd.where("id", "in", subjectIds);
|
||||
String dynamic = subjectIds.stream().map(id -> "'" + id + "'").collect(Collectors.joining(","));
|
||||
cnd.and(new Static("1=1 ORDER BY FIELD (id," + dynamic + ")"));
|
||||
resultSubjects = dao.query(QsvSubject.class, cnd);
|
||||
answerRecordId = maxAnswerRecordOptional.get().getId();
|
||||
} else {
|
||||
throw new BaseException("业务异常");
|
||||
throw new RuntimeException("业务异常");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Optional<QsvUserAnswerRecord> maxAnswerRecordOptional = answerRecords.stream().max(Comparator.comparingLong(QsvUserAnswerRecord::getRandomNumber));
|
||||
if (maxAnswerRecordOptional.isPresent()) {
|
||||
List<String> subjectIds = maxAnswerRecordOptional.get().getSubjectIds();
|
||||
Cnd cnd = Cnd.where(QsvSubject::getId, "in", subjectIds);
|
||||
Cnd cnd = Cnd.where("id", "in", subjectIds);
|
||||
String dynamic = subjectIds.stream().map(id -> "'" + id + "'").collect(Collectors.joining(","));
|
||||
cnd.and(new Static("1=1 ORDER BY FIELD (id," + dynamic + ")"));
|
||||
resultSubjects = dao.query(QsvSubject.class, cnd);
|
||||
answerRecordId = maxAnswerRecordOptional.get().getId();
|
||||
} else {
|
||||
throw new BaseException("业务异常");
|
||||
throw new RuntimeException("业务异常");
|
||||
}
|
||||
}
|
||||
} else if (displayMode.equals("RANDOM")) {
|
||||
} else if ("RANDOM".equals(displayMode)) {
|
||||
//判断是否有未答完的记录
|
||||
Optional<QsvUserAnswerRecord> notFinishRecordOptional = answerRecords.stream().filter(r -> !r.getIsFinish()).findFirst();
|
||||
if (notFinishRecordOptional.isPresent()) {
|
||||
List<String> subjectIds = notFinishRecordOptional.get().getSubjectIds();
|
||||
Cnd cnd = Cnd.where(QsvSubject::getId, "in", subjectIds);
|
||||
Cnd cnd = Cnd.where("id", "in", subjectIds);
|
||||
String dynamic = subjectIds.stream().map(id -> "'" + id + "'").collect(Collectors.joining(","));
|
||||
cnd.and(new Static("1=1 ORDER BY FIELD (id," + dynamic + ")"));
|
||||
resultSubjects = dao.query(QsvSubject.class, cnd);
|
||||
@@ -202,11 +217,11 @@ public class H5QsvQuizController {
|
||||
if (answerRecords.size() < totalRandom) {
|
||||
//进行下一次抽取
|
||||
List<String> subjectIds = answerRecords.stream().map(QsvUserAnswerRecord::getSubjectIds).flatMap(Collection::stream).toList();
|
||||
List<QsvSubject> subjects = dao.query(QsvSubject.class, Cnd.where(QsvSubject::getActivityId, "=", activityId)
|
||||
.and(QsvSubject::getId, "not in", subjectIds));
|
||||
List<QsvSubject> subjects = dao.query(QsvSubject.class, Cnd.where("activityId", "=", activityId)
|
||||
.and("id", "not in", subjectIds).asc("sortNum"));
|
||||
|
||||
if (subjects.size() < randomCount) {
|
||||
throw new BaseException("题目数不够,无法生成题目");
|
||||
throw new RuntimeException("题目数不够,无法生成题目");
|
||||
}
|
||||
|
||||
//从subjects里随机抽取randomCount个题目
|
||||
@@ -218,13 +233,13 @@ public class H5QsvQuizController {
|
||||
Optional<QsvUserAnswerRecord> maxAnswerRecordOptional = answerRecords.stream().max(Comparator.comparingLong(QsvUserAnswerRecord::getRandomNumber));
|
||||
if (maxAnswerRecordOptional.isPresent()) {
|
||||
List<String> subjectIds = maxAnswerRecordOptional.get().getSubjectIds();
|
||||
Cnd cnd = Cnd.where(QsvSubject::getId, "in", subjectIds);
|
||||
Cnd cnd = Cnd.where("id", "in", subjectIds);
|
||||
String dynamic = subjectIds.stream().map(id -> "'" + id + "'").collect(Collectors.joining(","));
|
||||
cnd.and(new Static("1=1 ORDER BY FIELD (id," + dynamic + ")"));
|
||||
resultSubjects = dao.query(QsvSubject.class, cnd);
|
||||
answerRecordId = maxAnswerRecordOptional.get().getId();
|
||||
} else {
|
||||
throw new BaseException("业务异常");
|
||||
throw new RuntimeException("业务异常");
|
||||
}
|
||||
}
|
||||
// }else{
|
||||
@@ -233,13 +248,13 @@ public class H5QsvQuizController {
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (mode.equals("SCHEDULED")) {
|
||||
} else if ("SCHEDULED".equals(mode)) {
|
||||
//定时定题
|
||||
//查询今天的题目
|
||||
|
||||
List<QsvUserAnswerRecord> todayRecords = dao.query(QsvUserAnswerRecord.class, Cnd.where(QsvUserAnswerRecord::getActivityId, "=", activityId)
|
||||
.and(QsvUserAnswerRecord::getUserId, "=", SecurityUtil.getUserId())
|
||||
.and(QsvUserAnswerRecord::getAttemptDate, "=", DateUtil.today())
|
||||
List<QsvUserAnswerRecord> todayRecords = dao.query(QsvUserAnswerRecord.class, Cnd.where("activityId", "=", activityId)
|
||||
.and("userId", "=", SecurityUtil.getUserId())
|
||||
.and("attemptDate", "=", DateUtil.today())
|
||||
);
|
||||
|
||||
if (ObjectUtil.isNotEmpty(todayRecords)) {
|
||||
@@ -248,13 +263,13 @@ public class H5QsvQuizController {
|
||||
//如果今天已生成的题目已答完并且还可以重复答
|
||||
if (todayAllFinish && todayRecords.size() < maxAttempts) {
|
||||
//生成今天的记录
|
||||
List<QsvSubject> subjects = dao.query(QsvSubject.class, Cnd.where(QsvSubject::getActivityId, "=", activityId)
|
||||
.and(QsvSubject::getDisplayDate, "=", DateUtil.today()));
|
||||
List<QsvSubject> subjects = dao.query(QsvSubject.class, Cnd.where("activityId", "=", activityId)
|
||||
.and("displayDate", "=", DateUtil.today()).asc("sortNum"));
|
||||
QsvUserAnswerRecord answerRecord = qsvUserAnswerRecordService.insertRecord(activityId, subjects.stream().map(QsvSubject::getId).collect(Collectors.toList()));
|
||||
answerRecordId = answerRecord.getId();
|
||||
|
||||
List<String> subjectIds = answerRecord.getSubjectIds();
|
||||
Cnd cnd = Cnd.where(QsvSubject::getId, "in", subjectIds);
|
||||
Cnd cnd = Cnd.where("id", "in", subjectIds);
|
||||
String dynamic = subjectIds.stream().map(id -> "'" + id + "'").collect(Collectors.joining(","));
|
||||
cnd.and(new Static("1=1 ORDER BY FIELD (id," + dynamic + ")"));
|
||||
resultSubjects = dao.query(QsvSubject.class, cnd);
|
||||
@@ -265,23 +280,23 @@ public class H5QsvQuizController {
|
||||
answerRecordId = maxTodayRecord.get().getId();
|
||||
|
||||
List<String> subjectIds = maxTodayRecord.get().getSubjectIds();
|
||||
Cnd cnd = Cnd.where(QsvSubject::getId, "in", subjectIds);
|
||||
Cnd cnd = Cnd.where("id", "in", subjectIds);
|
||||
String dynamic = subjectIds.stream().map(id -> "'" + id + "'").collect(Collectors.joining(","));
|
||||
cnd.and(new Static("1=1 ORDER BY FIELD (id," + dynamic + ")"));
|
||||
resultSubjects = dao.query(QsvSubject.class, cnd);
|
||||
} else {
|
||||
throw new BaseException("业务异常");
|
||||
throw new RuntimeException("业务异常");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//生成今天的记录
|
||||
List<QsvSubject> subjects = dao.query(QsvSubject.class, Cnd.where(QsvSubject::getActivityId, "=", activityId)
|
||||
.and(QsvSubject::getDisplayDate, "=", DateUtil.today()));
|
||||
List<QsvSubject> subjects = dao.query(QsvSubject.class, Cnd.where("activityId", "=", activityId)
|
||||
.and("displayDate", "=", DateUtil.today()).asc("sortNum"));
|
||||
QsvUserAnswerRecord answerRecord = qsvUserAnswerRecordService.insertRecord(activityId, subjects.stream().map(QsvSubject::getId).collect(Collectors.toList()));
|
||||
answerRecordId = answerRecord.getId();
|
||||
|
||||
List<String> subjectIds = answerRecord.getSubjectIds();
|
||||
Cnd cnd = Cnd.where(QsvSubject::getId, "in", subjectIds);
|
||||
Cnd cnd = Cnd.where("id", "in", subjectIds);
|
||||
String dynamic = subjectIds.stream().map(id -> "'" + id + "'").collect(Collectors.joining(","));
|
||||
cnd.and(new Static("1=1 ORDER BY FIELD (id," + dynamic + ")"));
|
||||
resultSubjects = dao.query(QsvSubject.class, cnd);
|
||||
@@ -289,25 +304,26 @@ public class H5QsvQuizController {
|
||||
}
|
||||
}
|
||||
|
||||
dao.fetchLinks(resultSubjects, "options", Cnd.NEW().asc(QsvOption::getSortNum));
|
||||
dao.fetchLinks(resultSubjects, "options", Cnd.NEW().asc("sortNum"));
|
||||
|
||||
resultSubjects.forEach(v -> v.setUserSelectOptionIds(new ArrayList<>()));
|
||||
|
||||
NutMap result = NutMap.NEW().addv("subjects", resultSubjects).addv("answerRecordId", answerRecordId).addv("activity", activity);
|
||||
NutMap result = NutMap.NEW().addv("subjects", resultSubjects).addv("answerRecordId", answerRecordId)
|
||||
.addv("activity", activity).addv("repeatTips", repeatTips);
|
||||
return Result.success(result);
|
||||
}
|
||||
|
||||
// 答题记录
|
||||
@At
|
||||
@SaCheckLogin
|
||||
@ApiOperation("答题记录")
|
||||
public Result answerRecord(@Valid String answerRecordId) {
|
||||
QsvUserAnswerRecord record = dao.fetch(QsvUserAnswerRecord.class, answerRecordId);
|
||||
return Result.success(record);
|
||||
}
|
||||
|
||||
// 提交答题
|
||||
@At
|
||||
@SaCheckLogin
|
||||
@ApiOperation("提交答题")
|
||||
@SLog(type = "qsv.quiz", tag = "提交答题", msg = "问卷调查提交答题")
|
||||
public Result submitAnswer(@Valid @Param("answer") QsvAnswerParam qsvAnswerParam) {
|
||||
QsvUserAnswerRecord answerRecord = dao.fetch(QsvUserAnswerRecord.class, qsvAnswerParam.getAnswerRecordId());
|
||||
JSONObject extJson = answerRecord.getExtJson();
|
||||
@@ -345,25 +361,24 @@ public class H5QsvQuizController {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckLogin
|
||||
public Result historyScore(@Valid String activityId) {
|
||||
List<QsvUserAnswerRecord> answerRecords = dao.query(QsvUserAnswerRecord.class, Cnd.where(QsvUserAnswerRecord::getActivityId, "=", activityId).and(QsvUserAnswerRecord::getUserId, "=", SecurityUtil.getUserId()).desc(QsvUserAnswerRecord::getCreatedAt));
|
||||
List<QsvUserAnswerRecord> answerRecords = dao.query(QsvUserAnswerRecord.class, Cnd.where("activityId", "=", activityId)
|
||||
.and("userId", "=", SecurityUtil.getUserId()).desc("createdAt"));
|
||||
return Result.success(answerRecords);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckLogin
|
||||
@ApiOperation("答题记录(结果页展示)")
|
||||
public Result answerResult(@Valid String answerRecordId) {
|
||||
QsvUserAnswerRecord answerRecord = dao.fetch(QsvUserAnswerRecord.class, answerRecordId);
|
||||
List<String> subjectIds = answerRecord.getSubjectIds();
|
||||
|
||||
Cnd cnd = Cnd.where(QsvSubject::getId, "in", subjectIds);
|
||||
Cnd cnd = Cnd.where("id", "in", subjectIds);
|
||||
String dynamic = subjectIds.stream().map(id -> "'" + id + "'").collect(Collectors.joining(","));
|
||||
cnd.and(new Static("1=1 ORDER BY FIELD (id," + dynamic + ")"));
|
||||
|
||||
List<QsvSubject> subjects = dao.query(QsvSubject.class, cnd);
|
||||
dao.fetchLinks(subjects, "options", Cnd.NEW().asc(QsvOption::getSortNum));
|
||||
dao.fetchLinks(subjects, "options", Cnd.NEW().asc("sortNum"));
|
||||
|
||||
subjects.forEach(v -> v.setUserSelectOptionIds(new ArrayList<>()));
|
||||
|
||||
+23
-21
@@ -1,16 +1,15 @@
|
||||
package com.budwk.app.zhgh.activity.qsv.h5controller;
|
||||
package com.budwk.app.zhgh.dayofficework.qsv.h5controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvActivity;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvSubject;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvUserAnswerRecord;
|
||||
import com.budwk.app.zhgh.activity.qsv.param.QsvAnswerParam;
|
||||
import com.budwk.app.zhgh.activity.qsv.service.QsvUserAnswerRecordService;
|
||||
import com.budwk.app.zhgh.activity.basic.models.ActivityUserScope;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvActivity;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvSubject;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvUserAnswerRecord;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.param.QsvAnswerParam;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.service.QsvUserAnswerRecordService;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
@@ -36,32 +35,37 @@ public class H5QsvSurveyController {
|
||||
private QsvUserAnswerRecordService qsvUserAnswerRecordService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhghh5/activity/qsv/survey/index.html")
|
||||
@SaCheckLogin
|
||||
@Ok("beetl:/mobile/qsv/survey/index.html")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckLogin
|
||||
public Result subjects(@Valid String activityId) {
|
||||
public Result subjects(String activityId) {
|
||||
QsvActivity activity = dao.fetch(QsvActivity.class, activityId);
|
||||
|
||||
int count = dao.count(ActivityUserScope.class, Cnd.where("groupId", "=", activity.getGroupId())
|
||||
.and("userId", "=", SecurityUtil.getUserId()));
|
||||
if (count != 1) {
|
||||
return Result.error("您无需参加此次投票,感谢您的关注!");
|
||||
}
|
||||
|
||||
String answerRecordId = null;
|
||||
|
||||
QsvUserAnswerRecord answerRecord = dao.fetch(QsvUserAnswerRecord.class, Cnd.where(QsvUserAnswerRecord::getActivityId, "=", activityId).and(QsvUserAnswerRecord::getUserId, "=", SecurityUtil.getUserId())
|
||||
.and(QsvUserAnswerRecord::getUserId, "=", SecurityUtil.getUserId()));
|
||||
QsvUserAnswerRecord answerRecord = dao.fetch(QsvUserAnswerRecord.class, Cnd.where("activityId", "=", activityId)
|
||||
.and("userId", "=", SecurityUtil.getUserId()));
|
||||
if (answerRecord == null) {
|
||||
List<QsvSubject> subjects = dao.query(QsvSubject.class, Cnd.where(QsvSubject::getActivityId, "=", activityId));
|
||||
List<QsvSubject> subjects = dao.query(QsvSubject.class, Cnd.where("activityId", "=", activityId).asc("sortNum"));
|
||||
qsvUserAnswerRecordService.insertRecord(activityId, subjects.stream().map(QsvSubject::getId).toList());
|
||||
}
|
||||
|
||||
QsvUserAnswerRecord answerRecord2 = dao.fetch(QsvUserAnswerRecord.class,
|
||||
Cnd.where(QsvUserAnswerRecord::getActivityId, "=", activityId)
|
||||
.and(QsvUserAnswerRecord::getUserId, "=", SecurityUtil.getUserId()));
|
||||
Cnd.where("activityId", "=", activityId)
|
||||
.and("userId", "=", SecurityUtil.getUserId()));
|
||||
|
||||
answerRecordId = answerRecord2.getId();
|
||||
|
||||
List<QsvSubject> subjects = dao.query(QsvSubject.class, Cnd.where(QsvSubject::getId, "in", answerRecord2.getSubjectIds()));
|
||||
dao.fetchLinks(subjects, "options");
|
||||
List<QsvSubject> subjects = dao.query(QsvSubject.class, Cnd.where("id", "in", answerRecord2.getSubjectIds()).asc("sortNum"));
|
||||
dao.fetchLinks(subjects, "options", Cnd.NEW().asc("sortNum"));
|
||||
|
||||
for (QsvSubject subject : subjects) {
|
||||
if (subject.getUserSelectOptionIds() == null) {
|
||||
@@ -74,14 +78,12 @@ public class H5QsvSurveyController {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckLogin
|
||||
public Result answerRecord(@Valid String answerRecordId) {
|
||||
QsvUserAnswerRecord record = dao.fetch(QsvUserAnswerRecord.class, answerRecordId);
|
||||
return Result.success(record);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckLogin
|
||||
public Result submitAnswer(@Valid @Param("answer") QsvAnswerParam qsvAnswerParam) {
|
||||
QsvUserAnswerRecord answerRecord = dao.fetch(QsvUserAnswerRecord.class, qsvAnswerParam.getAnswerRecordId());
|
||||
JSONObject extJson = answerRecord.getExtJson();
|
||||
+3
-19
@@ -1,8 +1,6 @@
|
||||
package com.budwk.app.zhgh.activity.qsv.models;
|
||||
package com.budwk.app.zhgh.dayofficework.qsv.models;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import com.budwk.app.sys.models.Sys_home_activity;
|
||||
import com.budwk.app.sys.services.SysHomeConvert;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
@@ -11,12 +9,12 @@ import org.nutz.dao.interceptor.annotation.PrevInsert;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@Table("qsv_activity")
|
||||
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||
@Comment("问卷调查投票活动表")
|
||||
public class QsvActivity extends BaseModel implements Serializable, SysHomeConvert {
|
||||
public class QsvActivity extends BaseModel implements Serializable {
|
||||
@Name
|
||||
@Comment("ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@@ -109,18 +107,4 @@ public class QsvActivity extends BaseModel implements Serializable, SysHomeConve
|
||||
@Comment("封面图片")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 255)
|
||||
private String cover;
|
||||
|
||||
@Override
|
||||
public Sys_home_activity covertToSysHomeActivity() {
|
||||
Sys_home_activity sysHomeActivity = new Sys_home_activity();
|
||||
sysHomeActivity.setId(this.getId());
|
||||
sysHomeActivity.setName(this.getTitle());
|
||||
sysHomeActivity.setCover(this.getCover());
|
||||
sysHomeActivity.setH5Url("/platform/h5/qsv");
|
||||
sysHomeActivity.setStartDate(this.getStartTime());
|
||||
sysHomeActivity.setEndDate(this.getEndTime());
|
||||
sysHomeActivity.setAllowUserGroupId(this.getGroupId());
|
||||
sysHomeActivity.setEnable(true);
|
||||
return sysHomeActivity;
|
||||
}
|
||||
}
|
||||
+15
-3
@@ -1,4 +1,4 @@
|
||||
package com.budwk.app.zhgh.activity.qsv.models;
|
||||
package com.budwk.app.zhgh.dayofficework.qsv.models;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
@@ -6,12 +6,14 @@ import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
import org.nutz.dao.interceptor.annotation.PrevInsert;
|
||||
|
||||
@Data
|
||||
import java.io.Serializable;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@Table("qsv_option")
|
||||
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||
@Comment("问卷调查投票选项表")
|
||||
public class QsvOption extends BaseModel {
|
||||
public class QsvOption extends BaseModel implements Serializable {
|
||||
|
||||
@Name
|
||||
@Comment("ID")
|
||||
@@ -39,6 +41,16 @@ public class QsvOption extends BaseModel {
|
||||
@ColDefine(type = ColType.VARCHAR, width = 255)
|
||||
private String imgUrl;
|
||||
|
||||
@Column
|
||||
@Comment("链接地址")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 255)
|
||||
private String link;
|
||||
|
||||
@Column
|
||||
@Comment("详情")
|
||||
@ColDefine(customType = "longtext")
|
||||
private String description;
|
||||
|
||||
@Column
|
||||
@Comment("排序")
|
||||
@ColDefine(type = ColType.INT)
|
||||
+8
-2
@@ -1,4 +1,4 @@
|
||||
package com.budwk.app.zhgh.activity.qsv.models;
|
||||
package com.budwk.app.zhgh.dayofficework.qsv.models;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
@@ -6,6 +6,7 @@ import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
import org.nutz.dao.interceptor.annotation.PrevInsert;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@@ -14,7 +15,7 @@ import java.util.List;
|
||||
@Table("qsv_subject")
|
||||
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||
@Comment("问卷调查投票题目表")
|
||||
public class QsvSubject extends BaseModel {
|
||||
public class QsvSubject extends BaseModel implements Serializable {
|
||||
|
||||
@Name
|
||||
@Comment("ID")
|
||||
@@ -52,6 +53,11 @@ public class QsvSubject extends BaseModel {
|
||||
@ColDefine(type = ColType.DATE)
|
||||
private Date displayDate;
|
||||
|
||||
@Column
|
||||
@Comment("多选,最多选几个")
|
||||
@ColDefine(type = ColType.INT, width = 1)
|
||||
private Integer maxMulti;
|
||||
|
||||
@Column
|
||||
@Comment("排序")
|
||||
@ColDefine(type = ColType.INT, width = 1)
|
||||
+3
-2
@@ -1,4 +1,4 @@
|
||||
package com.budwk.app.zhgh.activity.qsv.models;
|
||||
package com.budwk.app.zhgh.dayofficework.qsv.models;
|
||||
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
@@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
import org.nutz.dao.interceptor.annotation.PrevInsert;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@@ -15,7 +16,7 @@ import java.util.List;
|
||||
@Table("qsv_user_answer_record")
|
||||
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||
@Comment("问卷调查投票记录表")
|
||||
public class QsvUserAnswerRecord extends BaseModel {
|
||||
public class QsvUserAnswerRecord extends BaseModel implements Serializable {
|
||||
|
||||
@Name
|
||||
@Comment("ID")
|
||||
+2
-8
@@ -1,25 +1,19 @@
|
||||
package com.budwk.app.zhgh.activity.qsv.param;
|
||||
package com.budwk.app.zhgh.dayofficework.qsv.param;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@ApiModel(value = "答题参数")
|
||||
//答题参数
|
||||
public class QsvAnswerParam {
|
||||
|
||||
@ApiModelProperty("答题活动")
|
||||
private String activityId;
|
||||
|
||||
@ApiModelProperty("答题记录")
|
||||
private String answerRecordId;
|
||||
|
||||
@ApiModelProperty("答题题目")
|
||||
private List<Subject> subjects;
|
||||
|
||||
@ApiModelProperty("答题用时")
|
||||
private Integer answerTime;
|
||||
|
||||
@Data
|
||||
+2
-8
@@ -1,8 +1,6 @@
|
||||
package com.budwk.app.zhgh.activity.qsv.param;
|
||||
package com.budwk.app.zhgh.dayofficework.qsv.param;
|
||||
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@@ -10,19 +8,15 @@ import java.util.Date;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@ApiModel("问卷排名得分分页查询参数")
|
||||
//问卷排名得分分页查询参数
|
||||
public class QsvQuizRankPageForm extends PageForm {
|
||||
|
||||
@ApiModelProperty("活动ID")
|
||||
private String activityId;
|
||||
|
||||
@ApiModelProperty("分工会ID")
|
||||
private String unionId;
|
||||
|
||||
@ApiModelProperty("单位ID")
|
||||
private String unitId;
|
||||
|
||||
@ApiModelProperty("答题日期")
|
||||
private Date attemptDate;
|
||||
|
||||
}
|
||||
+3
-2
@@ -1,7 +1,8 @@
|
||||
package com.budwk.app.zhgh.activity.qsv.service;
|
||||
package com.budwk.app.zhgh.dayofficework.qsv.service;
|
||||
|
||||
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvActivity;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvActivity;
|
||||
|
||||
public interface QsvActivityService extends BaseService<QsvActivity> {
|
||||
}
|
||||
+5
-5
@@ -1,13 +1,13 @@
|
||||
package com.budwk.app.zhgh.activity.qsv.service;
|
||||
package com.budwk.app.zhgh.dayofficework.qsv.service;
|
||||
|
||||
|
||||
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvUserAnswerRecord;
|
||||
import com.budwk.app.zhgh.activity.qsv.param.QsvQuizRankPageForm;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvUserAnswerRecord;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.param.QsvQuizRankPageForm;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
|
||||
public interface QsvQuizRankService extends BaseService<QsvUserAnswerRecord> {
|
||||
|
||||
+5
-3
@@ -1,8 +1,10 @@
|
||||
package com.budwk.app.zhgh.activity.qsv.service;
|
||||
package com.budwk.app.zhgh.dayofficework.qsv.service;
|
||||
|
||||
|
||||
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.activity.qsv.dto.QsvCheckAnswerResult;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvUserAnswerRecord;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.dto.QsvCheckAnswerResult;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvUserAnswerRecord;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
+7
-4
@@ -1,18 +1,21 @@
|
||||
package com.budwk.app.zhgh.activity.qsv.service;
|
||||
package com.budwk.app.zhgh.dayofficework.qsv.service;
|
||||
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvUserAnswerRecord;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvUserAnswerRecord;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
public interface QsvSurveyService extends BaseService<QsvUserAnswerRecord> {
|
||||
|
||||
List<NutMap> report(String activityId);
|
||||
|
||||
void exportReportXlsx(String activityId, HttpServletResponse response);
|
||||
|
||||
void exportUserAnswerXlsx(String activityId, HttpServletResponse response);
|
||||
|
||||
NutMap userAnswer(String activityId);
|
||||
// NutMap userAnswer(String activityId);
|
||||
NutMap userAnswer(PageForm pageForm, String activityId);
|
||||
}
|
||||
+5
-4
@@ -1,9 +1,10 @@
|
||||
package com.budwk.app.zhgh.activity.qsv.service;
|
||||
package com.budwk.app.zhgh.dayofficework.qsv.service;
|
||||
|
||||
|
||||
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvSubject;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvUserAnswerRecord;
|
||||
import com.budwk.app.zhgh.activity.qsv.param.QsvAnswerParam;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvUserAnswerRecord;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.param.QsvAnswerParam;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
+3
-3
@@ -1,8 +1,8 @@
|
||||
package com.budwk.app.zhgh.activity.qsv.service.impl;
|
||||
package com.budwk.app.zhgh.dayofficework.qsv.service.impl;
|
||||
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvActivity;
|
||||
import com.budwk.app.zhgh.activity.qsv.service.QsvActivityService;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvActivity;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.service.QsvActivityService;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
|
||||
+7
-9
@@ -1,18 +1,17 @@
|
||||
package com.budwk.app.zhgh.activity.qsv.service.impl;
|
||||
package com.budwk.app.zhgh.dayofficework.qsv.service.impl;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.exception.BaseException;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.base.utils.CommonDownloadUtil;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvActivity;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvUserAnswerRecord;
|
||||
import com.budwk.app.zhgh.activity.qsv.param.QsvQuizRankPageForm;
|
||||
import com.budwk.app.zhgh.activity.qsv.service.QsvQuizRankService;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvActivity;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvUserAnswerRecord;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.param.QsvQuizRankPageForm;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.service.QsvQuizRankService;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
@@ -24,7 +23,6 @@ import org.nutz.lang.util.NutMap;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@IocBean(args = {"refer:dao"})
|
||||
@@ -60,7 +58,7 @@ public class QsvQuizRankServiceImpl extends BaseServiceImpl<QsvUserAnswerRecord>
|
||||
QsvActivity activity = dao().fetch(QsvActivity.class, activityId);
|
||||
|
||||
if (activity == null) {
|
||||
throw new BaseException("活动不存在: " + activityId);
|
||||
throw new RuntimeException("活动不存在: " + activityId);
|
||||
}
|
||||
|
||||
String mode = activity.getMode();
|
||||
@@ -95,9 +93,9 @@ public class QsvQuizRankServiceImpl extends BaseServiceImpl<QsvUserAnswerRecord>
|
||||
t1.userId,
|
||||
t1.userName,
|
||||
t1.loginName,
|
||||
u.sex,
|
||||
t1.unitName,
|
||||
t1.unionName,
|
||||
t1.sex,
|
||||
u.mobile,
|
||||
t1.totalScore,
|
||||
t1.attemptDate,
|
||||
+5
-5
@@ -1,11 +1,11 @@
|
||||
package com.budwk.app.zhgh.activity.qsv.service.impl;
|
||||
package com.budwk.app.zhgh.dayofficework.qsv.service.impl;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.zhgh.activity.qsv.dto.QsvCheckAnswerResult;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvSubject;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvUserAnswerRecord;
|
||||
import com.budwk.app.zhgh.activity.qsv.service.QsvQuizService;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.dto.QsvCheckAnswerResult;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvSubject;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvUserAnswerRecord;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.service.QsvQuizService;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
|
||||
+103
-26
@@ -1,22 +1,25 @@
|
||||
package com.budwk.app.zhgh.activity.qsv.service.impl;
|
||||
package com.budwk.app.zhgh.dayofficework.qsv.service.impl;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.afterturn.easypoi.excel.export.ExcelExportService;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.json.JSONArray;
|
||||
import cn.hutool.json.JSONObject;
|
||||
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.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.base.utils.CommonDownloadUtil;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvActivity;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvOption;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvSubject;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvUserAnswerRecord;
|
||||
import com.budwk.app.zhgh.activity.qsv.service.QsvSurveyService;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvActivity;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvOption;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvSubject;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvUserAnswerRecord;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.service.QsvSurveyService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
@@ -47,7 +50,8 @@ public class QsvSurveyServiceImpl extends BaseServiceImpl<QsvUserAnswerRecord> i
|
||||
|
||||
try {
|
||||
// 查询用户答题记录
|
||||
List<QsvUserAnswerRecord> answerRecords = dao().query(QsvUserAnswerRecord.class, Cnd.where(QsvUserAnswerRecord::getActivityId, "=", activityId));
|
||||
List<QsvUserAnswerRecord> answerRecords = dao().query(QsvUserAnswerRecord.class, Cnd.where("activityId", "=", activityId)
|
||||
.and("isFinish", "=", true));
|
||||
// 将答题记录的扩展JSON转换为JSONObject列表
|
||||
List<JSONObject> answerExtList = answerRecords.stream().map(QsvUserAnswerRecord::getExtJson).toList();
|
||||
|
||||
@@ -57,7 +61,7 @@ public class QsvSurveyServiceImpl extends BaseServiceImpl<QsvUserAnswerRecord> i
|
||||
List<String> subjectIds = subjects.stream().map(v -> v.getString("id")).toList();
|
||||
|
||||
// 查询题目选项列表
|
||||
List<QsvOption> options = dao().query(QsvOption.class, Cnd.where("subjectId", "in", subjectIds).asc(QsvOption::getSortNum));
|
||||
List<QsvOption> options = dao().query(QsvOption.class, Cnd.where("subjectId", "in", subjectIds).asc("sortNum"));
|
||||
// 按题目ID分组选项
|
||||
Map<String, List<QsvOption>> optionsGroup = options.stream().collect(Collectors.groupingBy(QsvOption::getSubjectId));
|
||||
|
||||
@@ -79,6 +83,10 @@ public class QsvSurveyServiceImpl extends BaseServiceImpl<QsvUserAnswerRecord> i
|
||||
}
|
||||
// 处理单选类型题目 处理多选类型题目
|
||||
else if ("radio".equals(subjectType) || "checkbox".equals(subjectType)) {
|
||||
long selectTotal = answerExtList.stream()
|
||||
.filter(ext -> ext.containsKey(subject.getString("id")))
|
||||
.count();
|
||||
|
||||
subjectOptions.forEach(subjectOption -> {
|
||||
long selectCount = answerExtList.stream()
|
||||
.filter(ext ->
|
||||
@@ -89,15 +97,22 @@ public class QsvSurveyServiceImpl extends BaseServiceImpl<QsvUserAnswerRecord> i
|
||||
&& jsonObject.getJSONArray("optionIds").contains(subjectOption.getString("id"));
|
||||
})
|
||||
.count();
|
||||
long round = Math.round((double) selectCount / selectTotal * 100);
|
||||
subjectOption.put("selectPercent", round + "%");
|
||||
subjectOption.put("selectCount", selectCount);
|
||||
});
|
||||
|
||||
long selectTotal = answerExtList.stream()
|
||||
.filter(ext -> ext.containsKey(subject.getString("id")))
|
||||
.count();
|
||||
subjectOptions.sort((o1, o2) -> {
|
||||
int count1 = o1.getInt("selectCount");
|
||||
int count2 = o2.getInt("selectCount");
|
||||
if (count1 == count2) {
|
||||
return Integer.compare(o1.getInt("sortNum"), o2.getInt("sortNum"));
|
||||
}
|
||||
return Integer.compare(count2, count1);
|
||||
});
|
||||
|
||||
subject.put("selectTotal", selectTotal);
|
||||
}
|
||||
|
||||
// 添加选项到题目中
|
||||
subject.addv("options", subjectOptions);
|
||||
}
|
||||
@@ -105,10 +120,36 @@ public class QsvSurveyServiceImpl extends BaseServiceImpl<QsvUserAnswerRecord> i
|
||||
return subjects;
|
||||
} catch (Exception e) {
|
||||
log.error("报告生成失败", e);
|
||||
throw new BaseException("报告生成失败", e);
|
||||
throw new RuntimeException("报告生成失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void exportReportXlsx(String activityId, HttpServletResponse response) {
|
||||
List<NutMap> report = report(activityId);
|
||||
|
||||
List<ExcelExportEntity> exportEntities = new ArrayList<>();
|
||||
exportEntities.add(new ExcelExportEntity("选项名称", "text", 20));
|
||||
exportEntities.add(new ExcelExportEntity("选择人数", "selectCount", 20));
|
||||
exportEntities.add(new ExcelExportEntity("选择比例", "selectPercent", 20));
|
||||
|
||||
Map<String, List<NutMap>> listMap = report.stream().collect(Collectors.groupingBy(v -> v.getString("id")));
|
||||
Workbook workbook = new XSSFWorkbook();
|
||||
listMap.forEach((k, v) -> {
|
||||
NutMap nutMap = v.get(0);
|
||||
ExcelExportService service = new ExcelExportService();
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setTitle(nutMap.getString("title"));
|
||||
exportParams.setSheetName(nutMap.getString("title"));
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
service.createSheetForMap(workbook, exportParams, exportEntities, nutMap.getList("options", NutMap.class));
|
||||
});
|
||||
|
||||
CommonDownloadUtil.download("调研分析.xlsx", workbook, response);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exportUserAnswerXlsx(String activityId, HttpServletResponse response) {
|
||||
// 检查活动ID是否为空
|
||||
@@ -124,19 +165,20 @@ public class QsvSurveyServiceImpl extends BaseServiceImpl<QsvUserAnswerRecord> i
|
||||
}
|
||||
|
||||
// 查询用户答题记录
|
||||
List<QsvUserAnswerRecord> answerRecords = dao().query(QsvUserAnswerRecord.class, Cnd.where(QsvUserAnswerRecord::getActivityId, "=", activityId));
|
||||
List<QsvUserAnswerRecord> answerRecords = dao().query(QsvUserAnswerRecord.class, Cnd.where("activityId", "=", activityId)
|
||||
.and("isFinish", "=", true));
|
||||
// 将答题记录的扩展JSON转换为JSONObject列表
|
||||
List<JSONObject> answerExtList = answerRecords.stream().map(QsvUserAnswerRecord::getExtJson).toList();
|
||||
|
||||
// 查询活动题目列表
|
||||
List<QsvSubject> subjects = dao().query(QsvSubject.class, Cnd.where(QsvSubject::getActivityId, "=", activityId));
|
||||
List<QsvSubject> subjects = dao().query(QsvSubject.class, Cnd.where("activityId", "=", activityId));
|
||||
// 将题目列表转换为Map
|
||||
Map<String, QsvSubject> subjectMap = subjects.stream().collect(Collectors.toMap(QsvSubject::getId, v -> v));
|
||||
// 获取题目ID列表
|
||||
List<String> subjectIds = subjects.stream().map(QsvSubject::getId).toList();
|
||||
|
||||
// 查询题目选项列表
|
||||
List<QsvOption> options = dao().query(QsvOption.class, Cnd.where("subjectId", "in", subjectIds).asc(QsvOption::getSortNum));
|
||||
List<QsvOption> options = dao().query(QsvOption.class, Cnd.where("subjectId", "in", subjectIds).asc("sortNum"));
|
||||
// 将选项列表转换为Map
|
||||
Map<String, QsvOption> optionMap = options.stream().collect(Collectors.toMap(QsvOption::getId, v -> v));
|
||||
|
||||
@@ -154,39 +196,74 @@ public class QsvSurveyServiceImpl extends BaseServiceImpl<QsvUserAnswerRecord> i
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("导出Excel失败", e);
|
||||
throw new BaseException("导出Excel失败", e);
|
||||
throw new RuntimeException("导出Excel失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public NutMap userAnswer(String activityId) {
|
||||
public NutMap userAnswer(PageForm pageForm, String activityId) {
|
||||
// 检查活动ID是否为空
|
||||
if (activityId == null || activityId.isEmpty()) {
|
||||
throw new IllegalArgumentException("活动ID不能为空");
|
||||
}
|
||||
|
||||
try {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("activityId", "=", activityId);
|
||||
cnd.and("isFinish", "=", true);
|
||||
// Cnd.where("activityId", "=", activityId)
|
||||
// .and("isFinish", "=", true)
|
||||
Pagination pagination = listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), cnd);
|
||||
List<NutMap> answerRecords = pagination.getList();
|
||||
|
||||
// 查询用户答题记录
|
||||
List<QsvUserAnswerRecord> answerRecords = dao().query(QsvUserAnswerRecord.class, Cnd.where(QsvUserAnswerRecord::getActivityId, "=", activityId));
|
||||
// List<QsvUserAnswerRecord> answerRecords = dao().query(QsvUserAnswerRecord.class, Cnd.where("activityId", "=", activityId)
|
||||
// .and("isFinish", "=", true));
|
||||
// 将答题记录的扩展JSON转换为JSONObject列表
|
||||
List<JSONObject> answerExtList = answerRecords.stream().map(QsvUserAnswerRecord::getExtJson).toList();
|
||||
// List<JSONObject> answerExtList = answerRecords.stream().map(QsvUserAnswerRecord::getExtJson).toList();
|
||||
|
||||
// 查询活动题目列表
|
||||
List<QsvSubject> subjects = dao().query(QsvSubject.class, Cnd.where(QsvSubject::getActivityId, "=", activityId));
|
||||
List<QsvSubject> subjects = dao().query(QsvSubject.class, Cnd.where("activityId", "=", activityId));
|
||||
// 将题目列表转换为Map
|
||||
Map<String, QsvSubject> subjectMap = subjects.stream().collect(Collectors.toMap(QsvSubject::getId, v -> v));
|
||||
// 获取题目ID列表
|
||||
List<String> subjectIds = subjects.stream().map(QsvSubject::getId).toList();
|
||||
|
||||
// 查询题目选项列表
|
||||
List<QsvOption> options = dao().query(QsvOption.class, Cnd.where("subjectId", "in", subjectIds).asc(QsvOption::getSortNum));
|
||||
List<QsvOption> options = dao().query(QsvOption.class, Cnd.where("subjectId", "in", subjectIds).asc("sortNum"));
|
||||
// 将选项列表转换为Map
|
||||
Map<String, QsvOption> optionMap = options.stream().collect(Collectors.toMap(QsvOption::getId, v -> v));
|
||||
|
||||
// 构建Excel导出实体
|
||||
List<ExcelExportEntity> excelExportEntities = buildExcelExportEntities(subjects);
|
||||
// 构建答题记录列表
|
||||
List<NutMap> list = buildAnswerRecords(answerRecords, subjectMap, options);
|
||||
List<NutMap> list = answerRecords.stream().map(record -> {
|
||||
NutMap map = NutMap.NEW()
|
||||
.addv("id", record.getString("id"))
|
||||
.addv("loginName", record.getString("loginName"))
|
||||
.addv("userName", record.getString("userName"))
|
||||
.addv("unitName", record.getString("unitName"))
|
||||
.addv("unionName", record.getString("unionName"));
|
||||
JSONObject extJson = record.getAs("extJson", JSONObject.class);
|
||||
extJson.forEach((k, v) -> {
|
||||
JSONObject jsonVal = (JSONObject) v;
|
||||
|
||||
String type = subjectMap.get(k).getType();
|
||||
if (type.equals("text")) {
|
||||
map.addv(k, jsonVal.getStr("text"));
|
||||
} else if (type.equals("radio") || type.equals("checkbox")) {
|
||||
JSONArray optionIds = jsonVal.getJSONArray("optionIds");
|
||||
String selectOptionTexts = options.stream().filter(option -> optionIds.contains(option.getId()))
|
||||
.map(QsvOption::getText).collect(Collectors.joining(";"));
|
||||
map.addv(k, selectOptionTexts);
|
||||
}
|
||||
});
|
||||
return map;
|
||||
}).toList();
|
||||
pagination.setList(list);
|
||||
|
||||
|
||||
// List<NutMap> list = buildAnswerRecords(answerRecords, subjectMap, options);
|
||||
|
||||
// 构建表格列信息
|
||||
List<NutMap> tableColumns = excelExportEntities.stream()
|
||||
@@ -195,9 +272,9 @@ public class QsvSurveyServiceImpl extends BaseServiceImpl<QsvUserAnswerRecord> i
|
||||
|
||||
return NutMap.NEW()
|
||||
.addv("tableColumns", tableColumns)
|
||||
.addv("tableData", list);
|
||||
.addv("tableData", pagination);
|
||||
} catch (Exception e) {
|
||||
throw new BaseException("获取用户答题记录失败", e);
|
||||
throw new RuntimeException("获取用户答题记录失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
+26
-28
@@ -1,24 +1,22 @@
|
||||
package com.budwk.app.zhgh.activity.qsv.service.impl;
|
||||
package com.budwk.app.zhgh.dayofficework.qsv.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.budwk.app.base.exception.BaseException;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.sys.views.View_user;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvActivity;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvSubject;
|
||||
import com.budwk.app.zhgh.activity.qsv.models.QsvUserAnswerRecord;
|
||||
import com.budwk.app.zhgh.activity.qsv.param.QsvAnswerParam;
|
||||
import com.budwk.app.zhgh.activity.qsv.service.QsvUserAnswerRecordService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvActivity;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvSubject;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.models.QsvUserAnswerRecord;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.param.QsvAnswerParam;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.service.QsvUserAnswerRecordService;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@@ -37,7 +35,7 @@ public class QsvUserAnswerRecordServiceImpl extends BaseServiceImpl<QsvUserAnswe
|
||||
Boolean shuffleSubject = activity.getShuffleSubject();
|
||||
|
||||
//打乱题目顺序
|
||||
if (category.equals("QUIZ") && shuffleSubject) {
|
||||
if ("QUIZ".equals(category) && shuffleSubject) {
|
||||
Collections.shuffle(subjectIds);
|
||||
}
|
||||
|
||||
@@ -56,26 +54,26 @@ public class QsvUserAnswerRecordServiceImpl extends BaseServiceImpl<QsvUserAnswe
|
||||
}
|
||||
record.setExtJson(extJson);
|
||||
|
||||
View_user user = dao().fetch(View_user.class, Cnd.where(View_user::getId, "=", SecurityUtil.getUserId()));
|
||||
View_user user = dao().fetch(View_user.class, Cnd.where("id", "=", SecurityUtil.getUserId()));
|
||||
record.setLoginName(user.getLoginname());
|
||||
record.setUserName(user.getUsername());
|
||||
record.setUnitId(SecurityUtil.getUnitId());
|
||||
record.setUnitId(user.getUnitId());
|
||||
record.setUnitName(user.getUnitName());
|
||||
record.setUnionId(user.getUnionId());
|
||||
record.setUnionName(user.getUnionName());
|
||||
|
||||
//问卷模式
|
||||
if (category.equals("QUIZ")) {
|
||||
if (mode.equals("REGULAR")) {
|
||||
if ("QUIZ".equals(category)) {
|
||||
if ("REGULAR".equals(mode)) {
|
||||
//常规模式 抽取随机题目
|
||||
int count = dao().count(QsvUserAnswerRecord.class, Cnd.where(QsvUserAnswerRecord::getActivityId, "=", activityId)
|
||||
.and(QsvUserAnswerRecord::getUserId, "=", SecurityUtil.getUserId()));
|
||||
int count = dao().count(QsvUserAnswerRecord.class, Cnd.where("activityId", "=", activityId)
|
||||
.and("userId", "=", SecurityUtil.getUserId()));
|
||||
record.setRandomNumber(count + 1);
|
||||
} else if (mode.equals("SCHEDULED")) {
|
||||
} else if ("SCHEDULED".equals(mode)) {
|
||||
//定时定题模式
|
||||
int count = dao().count(QsvUserAnswerRecord.class, Cnd.where(QsvUserAnswerRecord::getActivityId, "=", activityId)
|
||||
.and(QsvUserAnswerRecord::getUserId, "=", SecurityUtil.getUserId())
|
||||
.and(QsvUserAnswerRecord::getAttemptDate, "=", DateUtil.today()));
|
||||
int count = dao().count(QsvUserAnswerRecord.class, Cnd.where("activityId", "=", activityId)
|
||||
.and("userId", "=", SecurityUtil.getUserId())
|
||||
.and("attemptDate", "=", DateUtil.today()));
|
||||
record.setRandomNumber(count + 1);
|
||||
record.setAttemptDate(new Date());
|
||||
}
|
||||
@@ -90,7 +88,7 @@ public class QsvUserAnswerRecordServiceImpl extends BaseServiceImpl<QsvUserAnswe
|
||||
@Override
|
||||
public float calcScore(QsvAnswerParam qsvAnswerParam) {
|
||||
List<String> subjectIds = qsvAnswerParam.getSubjects().stream().map(QsvAnswerParam.Subject::getId).toList();
|
||||
List<QsvSubject> subjects = dao().query(QsvSubject.class, Cnd.where(QsvSubject::getId, "in", subjectIds));
|
||||
List<QsvSubject> subjects = dao().query(QsvSubject.class, Cnd.where("id", "in", subjectIds));
|
||||
|
||||
float score = 0;
|
||||
|
||||
@@ -113,12 +111,12 @@ public class QsvUserAnswerRecordServiceImpl extends BaseServiceImpl<QsvUserAnswe
|
||||
}
|
||||
|
||||
@Override
|
||||
@ApiOperation(TransAop.READ_COMMITTED)
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public void calcByScoreMode(String activityId, String userId) {
|
||||
// 获取活动信息
|
||||
QsvActivity activity = dao().fetch(QsvActivity.class, activityId);
|
||||
if (activity == null) {
|
||||
throw new BaseException("活动找不到" + activityId);
|
||||
throw new RuntimeException("活动找不到" + activityId);
|
||||
}
|
||||
|
||||
String mode = activity.getMode();
|
||||
@@ -182,18 +180,18 @@ public class QsvUserAnswerRecordServiceImpl extends BaseServiceImpl<QsvUserAnswe
|
||||
String orderByField = isHighest ? "totalScore" : "updatedAt";
|
||||
|
||||
// 更新所有记录的标志位为0
|
||||
Cnd cnd = Cnd.where(QsvUserAnswerRecord::getActivityId, "=", activityId)
|
||||
.and(QsvUserAnswerRecord::getUserId, "=", userId);
|
||||
Cnd cnd = Cnd.where("activityId", "=", activityId)
|
||||
.and("userId", "=", userId);
|
||||
if (isScheduled) {
|
||||
cnd.and(QsvUserAnswerRecord::getAttemptDate, "=", DateUtil.today());
|
||||
cnd.and("attemptDate", "=", DateUtil.today());
|
||||
}
|
||||
|
||||
dao().update(QsvUserAnswerRecord.class, Chain.make(flagField, 0), cnd);
|
||||
|
||||
// 找出符合条件的最大记录
|
||||
Cnd cnd2 = Cnd.where(QsvUserAnswerRecord::getActivityId, "=", activityId).and(QsvUserAnswerRecord::getUserId, "=", userId);
|
||||
Cnd cnd2 = Cnd.where("activityId", "=", activityId).and("userId", "=", userId);
|
||||
if (isScheduled) {
|
||||
cnd2.and(QsvUserAnswerRecord::getAttemptDate, "=", DateUtil.today());
|
||||
cnd2.and("attemptDate", "=", DateUtil.today());
|
||||
}
|
||||
cnd2.desc(orderByField);
|
||||
QsvUserAnswerRecord record = dao().fetch(QsvUserAnswerRecord.class, cnd2);
|
||||
+308
@@ -0,0 +1,308 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.controller.data;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
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.sys.models.Sys_file;
|
||||
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.workershome.model.WorkersHomeDataRevel;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.service.WorkersHomeInfoService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.boot.starter.ftp.FtpService;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Criteria;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.random.R;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:WorkersHomeDataRevelController
|
||||
* @Date 2024/7/30 15:48
|
||||
* @注释 职工建家资料管理
|
||||
*/
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@ApiOperation("职工建家资料管理")
|
||||
@At("/platform/workershome/data/revel")
|
||||
public class WorkersHomeDataRevelController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private FtpService ftpsService;
|
||||
@Inject
|
||||
private WorkersHomeInfoService workersHomeInfoService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/workershome/data/revel.html")
|
||||
@SaCheckPermission("workershome.data.revel")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("获取职工小家的树形数据,按分工会展示")
|
||||
@SaCheckPermission("workershome.data.revel")
|
||||
public Result getTreeData(@Param("year") String year,
|
||||
@Param("revelName") String revelName,
|
||||
@Param("typeId") String typeId) {
|
||||
NutMap nutMap = NutMap.NEW();
|
||||
nutMap.setv("unionname", "工会委员会");
|
||||
Sql sql = Sqls.create("""
|
||||
select
|
||||
un.*,
|
||||
un.name AS unionname,
|
||||
(select count(*) from workers_home_data_revel whdr where whdr.belongToUnionId = un.id $revelCount) as revelCount
|
||||
from
|
||||
sys_union un
|
||||
$condition
|
||||
""");
|
||||
Criteria criteria = Cnd.cri();
|
||||
criteria.where().setTop(false);
|
||||
if (StringUtils.isNotBlank(year)) {
|
||||
criteria.where().and("year(whdr.time)", "=", year);
|
||||
}
|
||||
if (StringUtils.isNotBlank(revelName)) {
|
||||
criteria.where().and(Cnd.likeEX("whdr.revelName", revelName));
|
||||
}
|
||||
if (StringUtils.isNotBlank(typeId)) {
|
||||
criteria.where().and("whdr.typeId", "=", typeId);
|
||||
}
|
||||
if (!criteria.where().isEmpty()) {
|
||||
sql.vars().set("revelCount", "and " + criteria.toSql(null));
|
||||
}
|
||||
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
cnd.and("un.id", "=", SecurityUtil.getUnionId());
|
||||
}
|
||||
cnd.asc("un.unioncode");
|
||||
sql.setCondition(cnd);
|
||||
nutMap.setv("child", workersHomeInfoService.listMap(sql));
|
||||
return Result.success().addData(List.of(nutMap));
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("按照工会查询职工小家资料列表")
|
||||
@SaCheckPermission("workershome.data.revel")
|
||||
public Object pageData(PageForm pageForm,
|
||||
@Param("year") String year,
|
||||
@Param("revelName") String revelName,
|
||||
@Param("typeId") String typeId,
|
||||
@Param("unionId") String unionId) {
|
||||
try {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
whdr.*,
|
||||
whdt.typeName
|
||||
FROM
|
||||
workers_home_data_revel whdr
|
||||
LEFT JOIN workers_home_data_type whdt ON whdr.typeId = whdt.id
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("year(whdr.time)", "=", year);
|
||||
if (StrUtil.isNotBlank(revelName)) {
|
||||
cnd.and(Cnd.likeEX("whdr.revelName", revelName));
|
||||
}
|
||||
cnd.andEX("whdr.typeId", "=", typeId);
|
||||
cnd.andEX("whdr.unionId", "=", unionId);
|
||||
cnd.desc("whdr.time");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = workersHomeInfoService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return Result.error();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("职工小家资料添加")
|
||||
@SaCheckPermission("workershome.data.revel")
|
||||
@SLog(tag = "职工小家资料添加", msg = "职工小家资料名称: ${args[0].revelName}")
|
||||
public Result doAdd(WorkersHomeDataRevel workersHomeDataRevel) {
|
||||
View_user user = dao.fetch(View_user.class, Cnd.where("id", "=", SecurityUtil.getUserId()));
|
||||
workersHomeDataRevel.setId(R.UU32());
|
||||
workersHomeDataRevel.setUserId(user.getId());
|
||||
workersHomeDataRevel.setUsername(user.getUsername());
|
||||
workersHomeDataRevel.setLoginName(user.getLoginname());
|
||||
workersHomeDataRevel.setUnitId(user.getUnitId());
|
||||
workersHomeDataRevel.setUnitName(user.getUnitName());
|
||||
workersHomeDataRevel.setUnionId(user.getUnionId());
|
||||
workersHomeDataRevel.setUnionName(user.getUnionName());
|
||||
workersHomeDataRevel.setTime(DateUtil.now());
|
||||
if (StrUtil.isNotBlank(workersHomeDataRevel.getBelongToUnionId())) {
|
||||
Sys_union union = dao.fetch(Sys_union.class, workersHomeDataRevel.getBelongToUnionId());
|
||||
workersHomeDataRevel.setBelongToUnionName(union.getName());
|
||||
} else {
|
||||
workersHomeDataRevel.setBelongToUnionId(user.getUnionId());
|
||||
workersHomeDataRevel.setBelongToUnionName(user.getUnionName());
|
||||
}
|
||||
dao.fastInsert(workersHomeDataRevel);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("职工小家资料修改")
|
||||
@SaCheckPermission("workershome.data.revel")
|
||||
@SLog(tag = "职工小家资料修改", msg = "职工小家资料名称: ${args[0].revelName}")
|
||||
public Result doEdit(WorkersHomeDataRevel workersHomeDataRevel) {
|
||||
dao.update(workersHomeDataRevel);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("职工小家资料删除")
|
||||
@SaCheckPermission("workershome.data.revel")
|
||||
@SLog(tag = "职工小家资料删除", msg = "职工小家资料id: ${args[0]}")
|
||||
public Result doDelete(String id) {
|
||||
WorkersHomeDataRevel revel = dao.fetch(WorkersHomeDataRevel.class, id);
|
||||
if (revel != null) {
|
||||
if (revel.getFiles() != null && !revel.getFiles().isEmpty()) {
|
||||
Set<String> fileIds = revel.getFiles().stream().map(Sys_file::getId).collect(Collectors.toSet());
|
||||
dao.clear(Sys_file.class, Cnd.where("id", "in", fileIds));
|
||||
}
|
||||
dao.clear(WorkersHomeDataRevel.class, Cnd.where("id", "=", id));
|
||||
}
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("按工会导出所有资料")
|
||||
@SaCheckPermission("workershome.data.revel")
|
||||
public void exportAllFileByUnionId(String unionId, String unionName, HttpServletResponse response) {
|
||||
response.reset();
|
||||
response.setContentType("application/x-msdownload;charset=utf-8");
|
||||
|
||||
// 创建临时文件夹
|
||||
String tmpPath = "tmp/" + R.UU32();
|
||||
File tmpDir = new File(tmpPath + "/" + unionName + "附件汇总");
|
||||
tmpDir.mkdirs();
|
||||
|
||||
List<WorkersHomeDataRevel> query = dao.query(WorkersHomeDataRevel.class, Cnd.where("belongToUnionId", "=", unionId));
|
||||
|
||||
try {
|
||||
if (Lang.isNotEmpty(query)) {
|
||||
for (WorkersHomeDataRevel revel : query) {
|
||||
// 创建资料名称的文件夹
|
||||
String fileName = revel.getRevelName();
|
||||
|
||||
File tDir = new File(tmpDir + "/" + fileName);
|
||||
tDir.mkdirs();
|
||||
|
||||
// if (Lang.isNotEmpty(revel.getFiles())) {
|
||||
// for (Sys_file file : revel.getFiles()) {
|
||||
// FileOutputStream outputStream = new FileOutputStream(tDir.getPath() + "/" + file.getFilename());
|
||||
// ftpsService.download(file.getFilepath(), outputStream);
|
||||
// outputStream.close();
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
String aimsDir = "zipTmp/" + R.UU32();
|
||||
String aimsName = unionName + "附件汇总.zip";
|
||||
String aimsPath = aimsDir + "/" + aimsName;
|
||||
// FileUtil.compressToZip(tmpDir.getPath(), aimsDir, aimsName);
|
||||
|
||||
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(aimsName, "UTF-8"));
|
||||
|
||||
File aimsFile = new File(aimsPath);
|
||||
FileInputStream inputStream = new FileInputStream(aimsFile);
|
||||
IOUtils.copy(inputStream, response.getOutputStream());
|
||||
inputStream.close();
|
||||
aimsFile.delete();
|
||||
|
||||
// FileUtil.deleteDir(new File(tmpPath));
|
||||
// FileUtil.deleteDir(new File(aimsDir));
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("导出单个资料")
|
||||
@SaCheckPermission("workershome.data.revel")
|
||||
public void exportAllFileById(String id, HttpServletResponse response) {
|
||||
response.reset();
|
||||
response.setContentType("application/x-msdownload;charset=utf-8");
|
||||
|
||||
WorkersHomeDataRevel dataRevel = dao.fetch(WorkersHomeDataRevel.class, Cnd.where("id", "=", id));
|
||||
|
||||
// 创建临时文件夹
|
||||
String tmpPath = "tmp/" + R.UU32();
|
||||
File tmpDir = new File(tmpPath + "/" + dataRevel.getBelongToUnionName() + dataRevel.getRevelName() + "附件汇总");
|
||||
tmpDir.mkdirs();
|
||||
|
||||
try {
|
||||
|
||||
if (Lang.isNotEmpty(dataRevel.getFiles())) {
|
||||
// for (Sys_file file : dataRevel.getFiles()) {
|
||||
// FileOutputStream outputStream = new FileOutputStream(tmpDir.getPath() + "/" + file.getFilename());
|
||||
// ftpsService.download(file.getFilepath(), outputStream);
|
||||
// outputStream.close();
|
||||
// }
|
||||
}
|
||||
|
||||
String aimsDir = "zipTmp/" + R.UU32();
|
||||
String aimsName = dataRevel.getBelongToUnionName() + dataRevel.getRevelName() + "附件汇总.zip";
|
||||
String aimsPath = aimsDir + "/" + aimsName;
|
||||
// FileUtil.compressToZip(tmpDir.getPath(), aimsDir, aimsName);
|
||||
|
||||
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(aimsName, "UTF-8"));
|
||||
|
||||
File aimsFile = new File(aimsPath);
|
||||
FileInputStream inputStream = new FileInputStream(aimsFile);
|
||||
IOUtils.copy(inputStream, response.getOutputStream());
|
||||
inputStream.close();
|
||||
aimsFile.delete();
|
||||
|
||||
// FileUtil.deleteDir(new File(tmpPath));
|
||||
// FileUtil.deleteDir(new File(aimsDir));
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
+134
@@ -0,0 +1,134 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.controller.data;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
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.zhgh.dayofficework.workershome.model.WorkersHomeDataType;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.service.WorkersHomeInfoService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.random.R;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:WorkersHomeDataTypeController
|
||||
* @Date 2024/7/30 15:48
|
||||
* @注释
|
||||
*/
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@ApiOperation("职工建家资料类型管理")
|
||||
@At("/platform/workershome/data/type")
|
||||
public class WorkersHomeDataTypeController {
|
||||
|
||||
@Inject
|
||||
private WorkersHomeInfoService workersHomeInfoService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/workershome/data/type.html")
|
||||
@SaCheckPermission("workershome.data.type")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("资料类型数据展示")
|
||||
@SaCheckPermission("workershome.data.type")
|
||||
public Result pageData(PageForm pageForm,
|
||||
@Param("typeName") String typeName) {
|
||||
Sql sql = Sqls.create("select * from workers_home_data_type $condition");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (StrUtil.isNotBlank(typeName)) {
|
||||
cnd.and(Cnd.likeEX("typeName", typeName));
|
||||
}
|
||||
cnd.asc("serialNum");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = workersHomeInfoService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success().addData(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("新增资料类型")
|
||||
@SaCheckPermission("workershome.data.type")
|
||||
@SLog(tag = "职工小家资料类型添加", msg = "职工小家资料类型名称: ${args[0].typeName}")
|
||||
public Result doAdd(WorkersHomeDataType workersHomeDataType) {
|
||||
int count = workersHomeInfoService.dao().count("workers_home_data_type", Cnd.where("code", "=", workersHomeDataType.getCode()));
|
||||
if (count > 0) {
|
||||
return Result.error("编码重复");
|
||||
}
|
||||
workersHomeDataType.setId(R.UU32());
|
||||
int totalCount = workersHomeInfoService.count("workers_home_data_type");
|
||||
workersHomeDataType.setSerialNum(totalCount + 1);
|
||||
workersHomeInfoService.insert("workers_home_data_type", Chain.from(workersHomeDataType));
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("修改资料类型")
|
||||
@SaCheckPermission("workershome.data.type")
|
||||
@SLog(tag = "职工小家资料类型修改", msg = "职工小家资料类型名称: ${args[0].typeName}")
|
||||
public Result doEdit(WorkersHomeDataType workersHomeDataType) {
|
||||
int count = workersHomeInfoService.count("workers_home_data_type", Cnd.where("code", "=", workersHomeDataType.getCode()).and("id", "!=", workersHomeDataType.getId()));
|
||||
if (count > 0) {
|
||||
return Result.error("编码重复");
|
||||
}
|
||||
workersHomeInfoService.update("workers_home_data_type", Chain.from(workersHomeDataType), Cnd.where("id", "=", workersHomeDataType.getId()));
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("删除资料类型")
|
||||
@SaCheckPermission("workershome.data.type")
|
||||
@SLog(tag = "职工小家资料类型删除", msg = "职工小家资料类型id: ${args[0]}")
|
||||
public Result doDelete(String id) {
|
||||
workersHomeInfoService.dao().clear(WorkersHomeDataType.class, Cnd.where("id", "=", id));
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("获取所有资料类型")
|
||||
@SaCheckPermission("workershome.data.type")
|
||||
public Result getAllWakesHomeDataType() {
|
||||
List<WorkersHomeDataType> list = workersHomeInfoService.dao().query(WorkersHomeDataType.class, Cnd.NEW().asc("serialNum"));
|
||||
return Result.success().addData(list);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("资料类型排序")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("workershome.data.type")
|
||||
public Result serialNumChange(String id, Integer serialNum, boolean toDown) {
|
||||
if (toDown) {
|
||||
WorkersHomeDataType next = workersHomeInfoService.dao().fetch(WorkersHomeDataType.class, Cnd.where("serialNum", "=", serialNum + 1));
|
||||
next.setSerialNum(serialNum - 1);
|
||||
workersHomeInfoService.dao().update(next);
|
||||
workersHomeInfoService.dao().update(WorkersHomeDataType.class, Chain.make("serialNum", serialNum + 1), Cnd.where("id", "=", id));
|
||||
} else {
|
||||
WorkersHomeDataType pre = workersHomeInfoService.dao().fetch(WorkersHomeDataType.class, Cnd.where("serialNum", "=", serialNum - 1));
|
||||
pre.setSerialNum(serialNum + 1);
|
||||
workersHomeInfoService.dao().update(pre);
|
||||
workersHomeInfoService.dao().update(WorkersHomeDataType.class, Chain.make("serialNum", serialNum - 1), Cnd.where("id", "=", id));
|
||||
}
|
||||
return Result.success();
|
||||
}
|
||||
}
|
||||
+93
@@ -0,0 +1,93 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.controller.declaration;
|
||||
|
||||
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.result.Result;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.model.WorkersHomeApply;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.service.WorkersHomeApplyService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.random.R;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:WorkersHomeDeclarationApplyController
|
||||
* @Date 2024/7/30 14:06
|
||||
* @注释 职工建家申报
|
||||
*/
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@ApiOperation("职工建家申报")
|
||||
@At("/platform/workershome/declaration/apply")
|
||||
public class WorkersHomeDeclarationApplyController {
|
||||
|
||||
@Inject
|
||||
private WorkersHomeApplyService workersHomeApplyService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/workershome/declaration/apply.html")
|
||||
@SaCheckPermission("workershome.declaration.apply")
|
||||
public void index() {}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("职工建家申报保存")
|
||||
@SLog(tag = "职工建家申报保存", msg = "职工建家申报信息")
|
||||
@SaCheckPermission("workershome.declaration.apply")
|
||||
public Result doSave(WorkersHomeApply workersHomeApply) {
|
||||
workersHomeApply.setState("10000");
|
||||
if (StrUtil.isNotBlank(workersHomeApply.getId())) {
|
||||
workersHomeApplyService.update(workersHomeApply);
|
||||
} else {
|
||||
workersHomeApplyService.setParams(workersHomeApply);
|
||||
workersHomeApplyService.fastInsert(workersHomeApply);
|
||||
}
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("职工建家申报提交")
|
||||
@SLog(tag = "职工建家申报提交", msg = "职工建家申报信息")
|
||||
@SaCheckPermission("workershome.declaration.apply")
|
||||
public Result doSubmit(WorkersHomeApply workersHomeApply) {
|
||||
workersHomeApply.setState("10020");
|
||||
if (StrUtil.isNotBlank(workersHomeApply.getId())) {
|
||||
workersHomeApplyService.update(workersHomeApply);
|
||||
} else {
|
||||
workersHomeApply.setId(R.UU32());
|
||||
workersHomeApplyService.setParams(workersHomeApply);
|
||||
workersHomeApplyService.fastInsert(workersHomeApply);
|
||||
}
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("职工建家申报信息查询")
|
||||
@SaCheckPermission(value = {"workershome.declaration.apply","workershome.declaration.mine",
|
||||
"workershome.declaration.organization", "workershome.declaration.school",
|
||||
"workershome.declaration.statistics"}, mode = SaMode.OR)
|
||||
public Result getInfoById(String id){
|
||||
NutMap map = workersHomeApplyService.findById(id);
|
||||
return Result.success().addData(map);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("职工建家申报工会信息查询")
|
||||
@SaCheckPermission("workershome.declaration.apply")
|
||||
public Result getWakesHomeUnitInfo() {
|
||||
WorkersHomeApply apply = workersHomeApplyService.fetch(Cnd.where("unionId", "=", SecurityUtil.getUnionId()));
|
||||
return Result.success().addData(apply);
|
||||
}
|
||||
}
|
||||
+147
@@ -0,0 +1,147 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.controller.declaration;
|
||||
|
||||
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;
|
||||
import com.budwk.app.base.model.Audit;
|
||||
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.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.model.WorkersHomeApply;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.service.WorkersHomeApplyService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:WorkersHomeDeclarationMineController
|
||||
* @Date 2024/7/30 14:06
|
||||
* @注释 我的建家申报
|
||||
*/
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@ApiOperation("职工建家我的申报")
|
||||
@At("/platform/workershome/declaration/mine")
|
||||
public class WorkersHomeDeclarationMineController {
|
||||
|
||||
@Inject
|
||||
private WorkersHomeApplyService workersHomeApplyService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/workershome/declaration/mine.html")
|
||||
@SaCheckPermission("workershome.declaration.mine")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("获取职工建家我的申报列表")
|
||||
@SaCheckPermission("workershome.declaration.mine")
|
||||
public Result pageData(PageForm pageForm,
|
||||
@Param("year") Integer year,
|
||||
@Param("unionId") String unionId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
wh.*,
|
||||
audit.stateName
|
||||
FROM
|
||||
`workers_home_apply` wh
|
||||
LEFT JOIN audit_state audit ON wh.state = audit.stateId
|
||||
AND audit.module = 'workershome'
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("YEAR(wh.applyDate)", "=", year);
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
cnd.and("unionId", "=", SecurityUtil.getUnionId());
|
||||
} else {
|
||||
cnd.andEX("unionId", "=", unionId);
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = workersHomeApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success().addData(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("职工建家我的申报删除")
|
||||
@SLog(tag = "职工建家我的申报删除", msg = "职工建家我的申报id: ${args[0]}")
|
||||
@SaCheckPermission(value = {"workershome.declaration.apply", "workershome.declaration.mine"}, mode = SaMode.OR)
|
||||
public Result doDelete(String id) {
|
||||
WorkersHomeApply apply = workersHomeApplyService.fetch(id);
|
||||
if (StrUtil.isNotBlank(apply.getOrganizationAuditId())) {
|
||||
workersHomeApplyService.dao().delete(Audit.class, apply.getOrganizationAuditId());
|
||||
}
|
||||
if (StrUtil.isNotBlank(apply.getSchoolAuditId())) {
|
||||
workersHomeApplyService.dao().delete(Audit.class, apply.getSchoolAuditId());
|
||||
}
|
||||
workersHomeApplyService.delete(id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
public void openExport(String id, HttpServletResponse response) {
|
||||
// try {
|
||||
// NutMap nutMap = workersHomeApplyService.findById(id);
|
||||
//
|
||||
// HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy();
|
||||
// HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();
|
||||
// htmlRenderPolicy.getConfig().setShowDefaultTableBorderInTableCell(true);
|
||||
//
|
||||
// Configure config = Configure.newBuilder()
|
||||
// .bind("basicInformation", htmlRenderPolicy)
|
||||
// .bind("constructionPlan", htmlRenderPolicy).build();
|
||||
// HashMap<String, Object> map = new HashMap<>();
|
||||
// String fileName = Globals.schoolName + "“教工小家”建设计划书";
|
||||
// map.put("fileName", fileName);
|
||||
// map.put("schoolName", Globals.schoolName);
|
||||
// map.put("unionName", nutMap.getString("unionName"));
|
||||
// map.put("applyDate", nutMap.getString("applyDate"));
|
||||
// map.put("username", nutMap.getString("username"));
|
||||
// map.put("mobile", nutMap.getString("mobile"));
|
||||
// map.put("basicInformation", nutMap.getString("basicInformation"));
|
||||
// map.put("constructionPlan", nutMap.getString("constructionPlan"));
|
||||
// NutMap schoolAudit = nutMap.getAs("schoolAudit", NutMap.class);
|
||||
// if (Lang.isNotEmpty(schoolAudit)){
|
||||
// schoolAudit.setv("auditTime", DateUtil.formatDate(schoolAudit.getTime("auditTime")));
|
||||
// schoolAudit.setv("auditSign", Vi.getImg(schoolAudit.getString("auditSign")));
|
||||
// map.put("schoolAudit", schoolAudit);
|
||||
// }
|
||||
// NutMap organizationAudit = nutMap.getAs("organizationAudit", NutMap.class);
|
||||
// if (Lang.isNotEmpty(organizationAudit)){
|
||||
// organizationAudit.setv("auditTime", DateUtil.formatDate(organizationAudit.getTime("auditTime")));
|
||||
// organizationAudit.setv("auditSign", Vi.getImg(organizationAudit.getString("auditSign")));
|
||||
// map.put("organizationAudit", organizationAudit);
|
||||
// }
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
// response.addHeader("Content-Type", "application/octet-stream");
|
||||
// response.addHeader("Content-Disposition", "attachment; filename=\"" + new String(fileName.getBytes("UTF-8"), "ISO-8859-1") + "\".docx");
|
||||
// InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("docTemplate/workershome/workershome.docx");
|
||||
// XWPFTemplate.compile(inputStream, config).render(map, response.getOutputStream());
|
||||
// inputStream.close();
|
||||
// } catch (Exception e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
}
|
||||
}
|
||||
+100
@@ -0,0 +1,100 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.controller.declaration;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.model.Audit;
|
||||
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.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.model.WorkersHomeApply;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.service.WorkersHomeApplyService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:WakesHomeDeclarationOrganization
|
||||
* @Date 2024/7/30 14:07
|
||||
* @注释 建家申报党组织审核
|
||||
*/
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@ApiOperation("职工建家申报党组织审核")
|
||||
@At("/platform/workershome/declaration/organization")
|
||||
public class WorkersHomeDeclarationOrganizationController {
|
||||
|
||||
@Inject
|
||||
private WorkersHomeApplyService workersHomeApplyService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/workershome/declaration/organizationAudit.html")
|
||||
@SaCheckPermission("workershome.declaration.organization")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("职工建家申报党组织审核")
|
||||
@SaCheckPermission("workershome.declaration.organization")
|
||||
public Result pageData(PageForm pageForm, @Param("year") Integer year,
|
||||
@Param("unionId") String unionId, @Param("isAudit") String isAudit) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
wh.*,
|
||||
audit.stateName
|
||||
FROM
|
||||
`workers_home_apply` wh
|
||||
LEFT JOIN audit_state audit ON wh.state = audit.stateId
|
||||
AND audit.module = 'workershome'
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
cnd.and("wh.unionId", "=", SecurityUtil.getUnionId());
|
||||
} else {
|
||||
cnd.andEX("wh.unionId", "=", unionId);
|
||||
}
|
||||
cnd.andEX("YEAR(wh.applyDate)", "=", year);
|
||||
cnd.and("wh.state", "true".equals(isAudit) ? ">" : "false".equals(isAudit) ? "=" : ">=", 10010);
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = workersHomeApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success().addData(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("职工建家申报党组织审核")
|
||||
@SaCheckPermission("workershome.declaration.organization")
|
||||
public Result doAudit(@Param("audit") Audit audit, String id) {
|
||||
Boolean auditPass = audit.getAuditPass();
|
||||
workersHomeApplyService.dao().insert(audit);
|
||||
workersHomeApplyService.update(Chain.make("state", auditPass ? 10020 : 10015)
|
||||
.add("organizationAuditId", audit.getId()), Cnd.where("id", "=", id));
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("workershome.declaration.organization")
|
||||
public Result doRollBack(String id){
|
||||
WorkersHomeApply workershome = workersHomeApplyService.fetch(id);
|
||||
workersHomeApplyService.dao().clear(Audit.class,Cnd.where("id","=",workershome.getOrganizationAuditId()));
|
||||
workersHomeApplyService.update(Chain.make("state",10010).add("organizationAuditId",null),Cnd.where("id","=",id));
|
||||
return Result.success();
|
||||
}
|
||||
}
|
||||
+119
@@ -0,0 +1,119 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.controller.declaration;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.model.Audit;
|
||||
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.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.model.WorkersHomeApply;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.service.WorkersHomeApplyService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:WorkersHomeDeclarationSchoolController
|
||||
* @Date 2024/7/30 14:07
|
||||
* @注释 建家申报校工会审核
|
||||
*/
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@ApiOperation("职工建家校工会审核")
|
||||
@At("/platform/workershome/declaration/school")
|
||||
public class WorkersHomeDeclarationSchoolController {
|
||||
|
||||
@Inject
|
||||
private WorkersHomeApplyService workersHomeApplyService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/workershome/declaration/schoolAudit.html")
|
||||
@SaCheckPermission("workershome.declaration.school")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("获取职工建家校工会审核列表")
|
||||
@SaCheckPermission("workershome.declaration.school")
|
||||
public Result pageData(PageForm pageForm,
|
||||
@Param("year") Integer year,
|
||||
@Param("unionId") String unionId,
|
||||
@Param("isAudit") String isAudit) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
wh.*,
|
||||
audit.stateName
|
||||
FROM
|
||||
`workers_home_apply` wh
|
||||
LEFT JOIN audit_state audit ON wh.state = audit.stateId
|
||||
AND audit.module = 'workershome'
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
cnd.and("wh.unionId", "=", SecurityUtil.getUnionId());
|
||||
} else {
|
||||
cnd.andEX("wh.unionId", "=", unionId);
|
||||
}
|
||||
cnd.andEX("YEAR(wh.applyDate)", "=", year);
|
||||
cnd.and("wh.state", "true".equals(isAudit) ? ">" : "false".equals(isAudit) ? "=" : ">=", 10020);
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = workersHomeApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success().addData(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("职工建家校工会审核")
|
||||
@SaCheckPermission("workershome.declaration.school")
|
||||
@SLog(tag = "职工建家校工会审核", msg = "职工建家校工会审核id: ${args[1]}")
|
||||
public Result doAudit(@Param("audit") Audit audit, String id) {
|
||||
Boolean auditPass = audit.getAuditPass();
|
||||
workersHomeApplyService.dao().insert(audit);
|
||||
workersHomeApplyService.update(Chain.make("state", auditPass ? 10030 : 10025)
|
||||
.add("schoolAuditId", audit.getId()), Cnd.where("id", "=", id));
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("职工建家校工会审核撤回")
|
||||
@SaCheckPermission("workershome.declaration.school")
|
||||
@SLog(tag = "职工建家校工会审核撤回", msg = "职工建家校工会审核撤回id: ${args[0]}")
|
||||
public Result doRollBack(String id) {
|
||||
WorkersHomeApply workersHome = workersHomeApplyService.fetch(id);
|
||||
workersHomeApplyService.dao().clear(Audit.class, Cnd.where("id", "=", workersHome.getSchoolAuditId()));
|
||||
workersHomeApplyService.update(Chain.make("state", 10020).add("schoolAuditId", null), Cnd.where("id", "=", id));
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("职工建家校工会审核文件上传")
|
||||
@SaCheckPermission("workershome.declaration.school")
|
||||
public Result doFiles(String id, String files) {
|
||||
WorkersHomeApply wakesHomeApply = new WorkersHomeApply();
|
||||
wakesHomeApply.setId(id);
|
||||
wakesHomeApply.setFiles(JSONUtil.toList(files, JSONObject.class));
|
||||
workersHomeApplyService.updateIgnoreNull(wakesHomeApply);
|
||||
return Result.success();
|
||||
}
|
||||
}
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.controller.declaration;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
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.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.service.WorkersHomeApplyService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:WorkersHomeDeclarationStatisticsController
|
||||
* @Date 2024/8/2 15:00
|
||||
* @注释 申报,查询统计
|
||||
*/
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@ApiOperation("职工建家统计")
|
||||
@At("/platform/workershome/declaration/statistics")
|
||||
public class WorkersHomeDeclarationStatisticsController {
|
||||
|
||||
@Inject
|
||||
private WorkersHomeApplyService workersHomeApplyService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/workershome/declaration/statistics.html")
|
||||
@SaCheckPermission("workershome.declaration.statistics")
|
||||
public void index() {}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("获取职工建家统计列表")
|
||||
@SaCheckPermission("workershome.declaration.statistics")
|
||||
public Result pageData(PageForm pageForm,
|
||||
@Param("year") Integer year,
|
||||
@Param("unionId") String unionId){
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
wh.*,
|
||||
audit.stateName
|
||||
FROM
|
||||
`workers_home_apply` wh
|
||||
LEFT JOIN audit_state audit ON wh.state = audit.stateId
|
||||
AND audit.module = 'workershome'
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
cnd.and("wh.unionId", "=", SecurityUtil.getUnionId());
|
||||
} else {
|
||||
cnd.andEX("wh.unionId", "=", unionId);
|
||||
}
|
||||
cnd.andEX("YEAR(wh.applyDate)", "=", year);
|
||||
cnd.and("wh.state", "=" , 10030);
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = workersHomeApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success().addData(pagination);
|
||||
}
|
||||
}
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.controller.info;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.model.WorkersHome;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.model.WorkersHomeApply;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.service.WorkersHomeInfoService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@ApiOperation("职工建家信息填报")
|
||||
@At("/platform/workershome/info/apply")
|
||||
public class WorkersHomeApplyController {
|
||||
|
||||
@Inject
|
||||
private WorkersHomeInfoService workersHomeInfoService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/workershome/info/apply.html")
|
||||
@SaCheckPermission("workershome.info.apply")
|
||||
public void index() {}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("workershome.info.apply")
|
||||
public Result doAdd(WorkersHome workershome, Boolean isSubmit){
|
||||
if (isSubmit){
|
||||
workershome.setState(8120);
|
||||
} else {
|
||||
workershome.setState(8100);
|
||||
}
|
||||
if (!"校工会".equals(workershome.getCategory())){
|
||||
workershome.setUnionId(SecurityUtil.getUnionId());
|
||||
}
|
||||
workersHomeInfoService.insert(workershome);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("workershome.info.apply")
|
||||
public Result doEdit(WorkersHome workershome,Boolean isSubmit){
|
||||
if (isSubmit){
|
||||
workershome.setState(8120);
|
||||
}
|
||||
workersHomeInfoService.updateIgnoreNull(workershome);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("workershome.info.apply")
|
||||
public Result validateApply(){
|
||||
int count = workersHomeInfoService.dao().count(WorkersHomeApply.class,
|
||||
Cnd.where("state", "=", "10030")
|
||||
.and("unionId", "=", SecurityUtil.getUnionId()));
|
||||
return (count > 0) ? Result.success() : Result.error();
|
||||
}
|
||||
}
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.controller.info;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.service.WorkersHomeInfoService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@ApiOperation("职工建家信息查询")
|
||||
@At("/platform/workershome/info/info")
|
||||
public class WorkersHomeInfoController {
|
||||
|
||||
@Inject
|
||||
private WorkersHomeInfoService workersHomeInfoService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/workershome/info/info.html")
|
||||
@SaCheckPermission("workershome.info.info")
|
||||
public void index() {}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("职工建家信息查询")
|
||||
@SaCheckPermission("workershome.info.info")
|
||||
public Result pageData(PageForm pageForm, @Param("year") Integer year, @Param("unionId") String unionId){
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
wh.*
|
||||
FROM
|
||||
`workers_home` wh
|
||||
LEFT JOIN sys_union su ON su.id = wh.unionId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("YEAR(applyTime)","=",year);
|
||||
if ("校工会".equals(unionId)){
|
||||
cnd.and("wh.category","=","校工会");
|
||||
} else {
|
||||
cnd.andEX("wh.unionId","=",unionId);
|
||||
}
|
||||
cnd.and("wh.state","=",8130);
|
||||
cnd.asc("su.unioncode");
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> list = workersHomeInfoService.listMap(sql);
|
||||
return Result.success().addData(list);
|
||||
}
|
||||
}
|
||||
+97
@@ -0,0 +1,97 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.controller.info;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.model.Audit;
|
||||
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.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.model.WorkersHome;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.service.WorkersHomeInfoService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@ApiOperation("职工建家信息我的填报")
|
||||
@At("/platform/workershome/info/mine")
|
||||
public class WorkersHomeMineController {
|
||||
|
||||
@Inject
|
||||
private WorkersHomeInfoService workersHomeInfoService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/workershome/info/mine.html")
|
||||
@SaCheckPermission("workershome.info.mine")
|
||||
public void index() {}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("职工建家信息我的填报列表")
|
||||
@SaCheckPermission("workershome.info.mine")
|
||||
public Result pageData(PageForm pageForm, @Param("year") Integer year, @Param("unionId")String unionId){
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
wh.*,
|
||||
audit.stateName
|
||||
FROM
|
||||
`workers_home` wh
|
||||
LEFT JOIN audit_state audit ON wh.state = audit.stateId
|
||||
AND audit.module = 'workershome'
|
||||
$condition
|
||||
""");
|
||||
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("YEAR(applyTime)","=",year);
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())){
|
||||
cnd.and("unionId","=", SecurityUtil.getUnionId());
|
||||
} else {
|
||||
if ("校工会".equals(unionId)){
|
||||
cnd.and("wh.category","=","校工会");
|
||||
} else {
|
||||
cnd.andEX("unionId", "=", unionId);
|
||||
}
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = workersHomeInfoService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("职工建家信息我的填报详情")
|
||||
@SaCheckPermission(value = {"workershome.info.mine","workershome.info.apply"}, mode = SaMode.OR)
|
||||
public Result getInfoById(String id){
|
||||
WorkersHome workersHome = workersHomeInfoService.fetch(id);
|
||||
NutMap nutMap = Lang.obj2nutmap(workersHome);
|
||||
Audit audit = workersHomeInfoService.dao().fetch(Audit.class, Cnd.where("id", "=", workersHome.getSchoolAuditId()));
|
||||
if (Lang.isNotEmpty(audit)){
|
||||
nutMap.setv("schoolAudit",audit);
|
||||
}
|
||||
return Result.success().addData(nutMap);
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("职工建家信息我的填报删除")
|
||||
@SaCheckPermission("workershome.info.mine")
|
||||
@SLog(tag = "职工建家信息", msg = "职工建家信息删除id: ${args[0]}")
|
||||
public Result doRemove(String id){
|
||||
workersHomeInfoService.delete(id);
|
||||
return Result.success();
|
||||
}
|
||||
}
|
||||
+102
@@ -0,0 +1,102 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.controller.info;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.model.Audit;
|
||||
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.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.model.WorkersHome;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.service.WorkersHomeInfoService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@ApiOperation("职工建家信息校工会审核")
|
||||
@At("/platform/workershome/info/schoolaudit")
|
||||
public class WorkersHomeSchoolAuditController {
|
||||
|
||||
@Inject
|
||||
private WorkersHomeInfoService workersHomeInfoService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/workershome/info/schoolAudit.html")
|
||||
@SaCheckPermission("workershome.info.schoolaudit")
|
||||
public void index() {}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("职工建家信息校工会审核列表")
|
||||
@SaCheckPermission("workershome.info.schoolaudit")
|
||||
public Result pageData(PageForm pageForm, @Param("year") Integer year,
|
||||
@Param("unionId")String unionId, @Param("isAudit") String isAudit){
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
wh.*,
|
||||
audit.stateName
|
||||
FROM
|
||||
`workers_home` wh
|
||||
LEFT JOIN audit_state audit ON wh.state = audit.stateId
|
||||
AND audit.module = 'workershome'
|
||||
$condition
|
||||
""");
|
||||
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())){
|
||||
cnd.and("unionId", "=" , SecurityUtil.getUnionId());
|
||||
} else {
|
||||
if ("校工会".equals(unionId)){
|
||||
cnd.and("wh.category","=","校工会");
|
||||
} else {
|
||||
cnd.andEX("unionId", "=", unionId);
|
||||
}
|
||||
}
|
||||
cnd.andEX("YEAR(applyTime)","=",year);
|
||||
cnd.and("wh.state", "true".equals(isAudit) ? ">" : "false".equals(isAudit) ? "=" : ">=", 8120);
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = workersHomeInfoService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success().addData(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("职工建家信息校工会审核")
|
||||
@SaCheckPermission("workershome.info.schoolaudit")
|
||||
@SLog(tag = "职工建家信息校工会审核", msg = "职工建家信息校工会审核id: ${args[1]}")
|
||||
public Result doAudit(@Param("audit") Audit audit, String id, String isPass){
|
||||
workersHomeInfoService.dao().insert(audit);
|
||||
workersHomeInfoService.update(Chain.make("state","1".equals(isPass) ? 8130 : 8125)
|
||||
.add("schoolAuditId",audit.getId()), Cnd.where("id","=",id));
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("职工建家信息校工会审核撤回")
|
||||
@SaCheckPermission("workershome.info.schoolaudit")
|
||||
@SLog(tag = "职工建家信息校工会审核撤回", msg = "职工建家信息校工会审核撤回id: ${args[0]}")
|
||||
public Object doRollBack(String id){
|
||||
WorkersHome workersHome = workersHomeInfoService.fetch(id);
|
||||
workersHomeInfoService.dao().clear(Audit.class,Cnd.where("id","=",workersHome.getSchoolAuditId()));
|
||||
workersHomeInfoService.update(Chain.make("state",8120).add("schoolAuditId",null),Cnd.where("id","=",id));
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
+115
@@ -0,0 +1,115 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.controller.review;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
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.sys.models.Sys_union;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewPeo;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentZbService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Strings;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:WorkersHomeReviewController
|
||||
* @Date 2024/8/1 16:47
|
||||
* @注释 pc端职工评议
|
||||
*/
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@ApiOperation("电脑端的职工评议")
|
||||
@At("/platform/workershome/review/doReview")
|
||||
public class WorkersHomeReviewController {
|
||||
|
||||
@Inject
|
||||
private CommentZbService commentZbService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/workershome/review/doReview.html")
|
||||
@SaCheckPermission("workershome.review.doReview")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("职工评议分页数据")
|
||||
@SaCheckPermission("workershome.review.doReview")
|
||||
public Result pageData(PageForm pageForm,
|
||||
@Param("annual") String annual,
|
||||
@Param("assessment") String assessment){
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
zb.* ,
|
||||
if((select count(1) from comment_peo peo where peo.zbId = zb.id and peo.userId = @userId) > 0,true,false) as isReview
|
||||
FROM
|
||||
`comment_zb` zb
|
||||
$condition
|
||||
""").setParam("userId", SecurityUtil.getUserId());
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (Strings.isNotBlank(annual) && Strings.isNotBlank(annual)) {
|
||||
cnd.and("zb.annual", "=", annual);
|
||||
}
|
||||
if (Strings.isNotBlank(assessment) && Strings.isNotBlank(assessment)) {
|
||||
cnd.where().andLike("zb.assessment", assessment);
|
||||
} else {
|
||||
cnd.desc("zb.annual");
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = commentZbService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
List<NutMap> list = pagination.getList();
|
||||
List<Sys_union> unionList = commentZbService.dao().query(Sys_union.class, Cnd.NEW());
|
||||
list.forEach(v -> {
|
||||
//自评模式
|
||||
boolean reviewMode = v.getInt("reviewMode") == 1;
|
||||
if (reviewMode && v.getInt("commentTarget") == 1) {
|
||||
//校工会自评,判断有没有校工会管理员的权限
|
||||
v.put("canJoin", AuthUtil.hasRole(RoleConstant.SCHOOL_UNION_ADMIN.name()));
|
||||
} else if (reviewMode && v.getInt("commentTarget") == 2){
|
||||
//分工会自评,判断有没有分工会管理员
|
||||
v.put("canJoin", AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name()));
|
||||
}
|
||||
|
||||
//自选分工会的模式
|
||||
if (StrUtil.isNotBlank(v.getString("unionIds"))) {
|
||||
List<String> unionIdList = JSONUtil.parseArray(v.getString("unionIds")).toList(String.class);
|
||||
String string = unionList.stream().filter(item -> unionIdList.contains(item.getId()))
|
||||
.map(Sys_union::getName).collect(Collectors.joining(","));
|
||||
v.put("unionNames", string);
|
||||
//如果是自评,只有分工会主席才能自评
|
||||
if (reviewMode) {
|
||||
v.put("canJoin", (unionIdList.contains(SecurityUtil.getUnionId()) && AuthUtil.hasRole(RoleConstant.BRANCH_UNION_ADMIN.name())));
|
||||
} else {
|
||||
v.put("canJoin", unionIdList.contains(SecurityUtil.getUnionId()));
|
||||
}
|
||||
}
|
||||
});
|
||||
return Result.success().addData(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("判断当前用户是否已经评价")
|
||||
@SaCheckPermission("workershome.review.doReview")
|
||||
public Object getPeoId(String id){
|
||||
WorkersHomeReviewPeo peo = commentZbService.dao().fetch(WorkersHomeReviewPeo.class, Cnd.where("zbId", "=", id).and("userId", "=", SecurityUtil.getUserId()));
|
||||
return Result.success().addData(peo.getId());
|
||||
}
|
||||
}
|
||||
+267
@@ -0,0 +1,267 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.controller.review;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.core.util.ZipUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.sys.views.View_user;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewExport;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewProxy;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentZbService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.apache.poi.util.IOUtils;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Strings;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.servlet.ServletOutputStream;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @ClassName exportZpController
|
||||
* @Description TODO
|
||||
* @Author zhf
|
||||
* @Date 2023/9/6 17:09
|
||||
*/
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@ApiOperation("职工评议-导出")
|
||||
@At("/platform/workershome/review/export")
|
||||
public class WorkersHomeReviewExportController {
|
||||
|
||||
|
||||
// @Inject
|
||||
// private OfficeTemplateUtil officeTemplateUtil;
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private CommentZbService zbService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/unionComment/exportZp.html")
|
||||
@SaCheckPermission("workerhome.review.export")
|
||||
public void index() {}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("获取列表")
|
||||
@SaCheckPermission("workerhome.review.export")
|
||||
public Result pageData(@Param("annual") Integer annual,
|
||||
int pageNumber, int pageSize) {
|
||||
Sql sql = Sqls.create("SELECT YEAR(e.createTime) annual,e.* FROM `comment_export` e $condition");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("YEAR(e.createTime)", "=", annual);
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = zbService.listPageMap(pageNumber, pageSize, sql);
|
||||
return Result.success().addData(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("获取指标列表")
|
||||
@SaCheckPermission("workerhome.review.export")
|
||||
public Result getZbData(@Param("annual") String annual, @Param("assessment") String assessment) {
|
||||
Sql sql = Sqls.create("SELECT * FROM `comment_zb` $condition");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (Strings.isNotBlank(annual) && Strings.isNotBlank(annual)) {
|
||||
cnd.and("annual", "=", annual);
|
||||
}
|
||||
if (Strings.isNotBlank(assessment) && Strings.isNotBlank(assessment)) {
|
||||
cnd.where().andLike("assessment", assessment);
|
||||
} else {
|
||||
cnd.desc("annual");
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> list = zbService.listMap(sql);
|
||||
return Result.success().addData(list);
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("添加导出内容")
|
||||
@SaCheckPermission("workerhome.review.export")
|
||||
public Result doAddExport(@Param("export") WorkersHomeReviewExport export) {
|
||||
export.setCreateTime(DateUtil.now());
|
||||
if (StrUtil.isNotBlank(export.getId())) {
|
||||
zbService.updateIgnoreNull(export);
|
||||
} else {
|
||||
zbService.insert(export);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("删除导出内容")
|
||||
@SaCheckPermission("workerhome.review.export")
|
||||
@SLog(tag = "删除导出内容", msg = "删除到处内容id: ${args[0]}")
|
||||
public Result doDelete(String id) {
|
||||
zbService.dao().delete(WorkersHomeReviewExport.class, id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("获取导出内容")
|
||||
@SaCheckPermission("workerhome.review.export")
|
||||
public Result findOne(String id) {
|
||||
WorkersHomeReviewExport export = zbService.dao().fetch(WorkersHomeReviewExport.class, id);
|
||||
List<WorkersHomeReviewProxy> zbList = zbService.query(Cnd.NEW().and("id", "in", export.getProxyIds()).asc("assessmentMode"));
|
||||
Map<String, Object> data = Map.of("export", export, "zbList", zbList);
|
||||
return Result.success().addData(data);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("导出")
|
||||
@SaCheckPermission("workerhome.review.export")
|
||||
public void doExport(String id, HttpServletResponse response) throws Exception {
|
||||
WorkersHomeReviewExport export = zbService.dao().fetch(WorkersHomeReviewExport.class, id);
|
||||
//查询测评有那几个工会测评过
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
un.id,
|
||||
un.unionname unionName,
|
||||
count( peo.id ) num
|
||||
FROM
|
||||
sys_union un
|
||||
LEFT JOIN `user` u ON u.unionId = un.id
|
||||
LEFT JOIN comment_peo peo ON peo.userId = u.id
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("peo.zbId", "in", export.getProxyIds());
|
||||
cnd.groupBy("un.id");
|
||||
cnd.desc("count( peo.id )");
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> unionMap = zbService.listMap(sql);
|
||||
|
||||
|
||||
List<WorkersHomeReviewProxy> zbs = zbService.query(Cnd.NEW().and("id", "in", export.getProxyIds()).asc("assessmentMode"));
|
||||
|
||||
//创建临时文件夹
|
||||
Path templateDir = Files.createTempDirectory("评测结果文件夹");
|
||||
|
||||
//循环分工会
|
||||
for (NutMap un : unionMap) {
|
||||
List<View_user> users = zbService.dao().query(View_user.class, Cnd.where("unionId", "=", un.getString("id")));
|
||||
|
||||
FileOutputStream outputStream = new FileOutputStream(templateDir.toString() + "/" + un.getString("unionName") + "基层工会会员评家民主测评结果报告表.docx");
|
||||
|
||||
List<NutMap> zpxxList = new ArrayList<>();
|
||||
for (WorkersHomeReviewProxy zb : zbs) {
|
||||
|
||||
Sql sqlps = Sqls.create("""
|
||||
SELECT
|
||||
SUM( CASE WHEN cp.reviewResult = '不满意' THEN 1 ELSE 0 END ) AS bmy,
|
||||
SUM( CASE WHEN cp.reviewResult = '基本满意' THEN 1 ELSE 0 END ) AS jbmy,
|
||||
SUM( CASE WHEN cp.reviewResult = '满意' THEN 1 ELSE 0 END ) AS my
|
||||
FROM
|
||||
comment_peo cp
|
||||
LEFT JOIN `user` u ON u.id = cp.userId
|
||||
$condition
|
||||
""");
|
||||
Cnd cndPs = Cnd.NEW();
|
||||
cndPs.and("u.unionId", "=", un.getString("id"));
|
||||
cndPs.and("cp.zbId", "=", zb.getId());
|
||||
|
||||
sqlps.setCondition(cndPs);
|
||||
if (zb.getAssessmentMode() == 1) {
|
||||
NutMap zpxx = new NutMap();
|
||||
|
||||
sqlps.setCallback(Sqls.callback.map());
|
||||
dao.execute(sqlps);
|
||||
NutMap psMap = (NutMap) sqlps.getResult();
|
||||
zpxx.setv("pcdx", "工会工作及职工之家建设情况测评");
|
||||
zpxx.setv("my", psMap.getInt("my"));
|
||||
zpxx.setv("jbmy", psMap.getInt("jbmy"));
|
||||
zpxx.setv("bmy", psMap.getInt("bmy"));
|
||||
zpxxList.add(zpxx);
|
||||
} else {
|
||||
NutMap zpxxZx = new NutMap();
|
||||
Cnd clone = cndPs.clone();
|
||||
sqlps.setCondition(clone);
|
||||
clone.and("cp.evaluatedPersonType", "=", "分工会主席");
|
||||
|
||||
sqlps.setCallback(Sqls.callback.map());
|
||||
dao.execute(sqlps);
|
||||
NutMap psMap = (NutMap) sqlps.getResult();
|
||||
zpxxZx.setv("pcdx", "工会主席履职情况测评");
|
||||
zpxxZx.setv("my", psMap.getInt("my"));
|
||||
zpxxZx.setv("jbmy", psMap.getInt("jbmy"));
|
||||
zpxxZx.setv("bmy", psMap.getInt("bmy"));
|
||||
zpxxList.add(zpxxZx);
|
||||
|
||||
|
||||
NutMap zpxxFzx = new NutMap();
|
||||
Cnd clone2 = cndPs.clone();
|
||||
clone2.and("cp.evaluatedPersonType", "=", "分工会副主席");
|
||||
sqlps.setCondition(clone2);
|
||||
|
||||
sqlps.setCallback(Sqls.callback.map());
|
||||
dao.execute(sqlps);
|
||||
NutMap psMap2 = (NutMap) sqlps.getResult();
|
||||
zpxxFzx.setv("pcdx", "工会副主席履职情况测评");
|
||||
zpxxFzx.setv("my", psMap2.getInt("my"));
|
||||
zpxxFzx.setv("jbmy", psMap2.getInt("jbmy"));
|
||||
zpxxFzx.setv("bmy", psMap2.getInt("bmy"));
|
||||
zpxxList.add(zpxxFzx);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
// HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy();
|
||||
// HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();
|
||||
// htmlRenderPolicy.getConfig().setShowDefaultTableBorderInTableCell(true);
|
||||
//
|
||||
// Configure config = Configure.newBuilder().bind("zpxxList", policy).build();
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
|
||||
map.put("zpxxList", zpxxList);
|
||||
map.put("unionName", un.getString("unionName"));
|
||||
map.put("num", users.size());
|
||||
map.put("memberNum", users.stream().filter(v -> v.getMember() == 1).collect(Collectors.toList()).size());
|
||||
// XWPFTemplate.compile(officeTemplateUtil.getPath("unionComment"), config).render(map).writeAndClose(outputStream);
|
||||
|
||||
outputStream.close();
|
||||
}
|
||||
|
||||
//压缩
|
||||
File zipFile = ZipUtil.zip(templateDir.toString());
|
||||
response.setHeader("content-disposition", "attachment;filename="
|
||||
+ URLEncoder.encode(zipFile.getName(), "UTF-8"));
|
||||
try (ServletOutputStream outputStream = response.getOutputStream();
|
||||
FileInputStream zipFis = new FileInputStream(zipFile);) {
|
||||
IOUtils.copy(zipFis, outputStream);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
FileUtil.del(templateDir);
|
||||
FileUtil.del(zipFile);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.controller.review;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewContent;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewProxy;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentZbService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName addZbController
|
||||
* @Description TODO
|
||||
* @Author zhf
|
||||
* @Date 2023/9/4 15:42
|
||||
*/
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@ApiOperation("职工评议-添加考核指标")
|
||||
@At("/platform/workershome/review/proxy")
|
||||
public class WorkersHomeReviewProxyController {
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/workershome/review/xjkhzb.html")
|
||||
@SaCheckPermission("workershome.review.proxy")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@Inject
|
||||
private CommentZbService commentZbService;
|
||||
|
||||
@At
|
||||
@ApiOperation("添加指标")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("workershome.review.proxy")
|
||||
public Result doAdd(@Param("kh_zb") WorkersHomeReviewProxy commentZb) {
|
||||
WorkersHomeReviewProxy zb = commentZbService.insert(commentZb);
|
||||
for (WorkersHomeReviewContent nr : commentZb.getReviewContents()) {
|
||||
nr.setProxyId(zb.getId());
|
||||
nr.getReviewNorms().forEach(v->v.setProxyId(zb.getId()));
|
||||
commentZbService.insertWith(nr, "bzs");
|
||||
}
|
||||
commentZbService.setGrading(zb);
|
||||
return Result.success();
|
||||
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("获取指标列表")
|
||||
public Result getZbList(Integer year) {
|
||||
List<WorkersHomeReviewProxy> annual = commentZbService.query(Cnd.NEW().andEX("annual", "=", year));
|
||||
return Result.success(annual);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+441
@@ -0,0 +1,441 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.controller.review;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
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.sys.models.Sys_file;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewPeo;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewGrading;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewProxy;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentPeoService;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentStatisticsService;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentZbService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.nutz.boot.starter.ftp.FtpService;
|
||||
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.lang.Lang;
|
||||
import org.nutz.lang.random.R;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.List;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
/**
|
||||
* @ClassName statisticsController
|
||||
* @Description TODO
|
||||
* @Author zhf
|
||||
* @Date 2023/9/5 15:58
|
||||
*/
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@ApiOperation("职工评议-统计")
|
||||
@At("/platform/workershome/review/statistics")
|
||||
public class WorkersHomeReviewStatistics {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private FtpService ftpService;
|
||||
@Inject
|
||||
private CommentZbService commentZbService;
|
||||
@Inject
|
||||
private CommentPeoService commentPeoService;
|
||||
@Inject
|
||||
private CommentStatisticsService commentStatisticsService;
|
||||
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/workershome/review/statistics.html")
|
||||
@SaCheckPermission("workershome.review.statistics")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("获取列表")
|
||||
@SaCheckPermission("workershome.review.statistics")
|
||||
public Result pageData(PageForm page,
|
||||
@Param("zbId") String zbId,
|
||||
@Param("unionId") String unionId) {
|
||||
|
||||
WorkersHomeReviewProxy zb = commentPeoService.dao().fetch(WorkersHomeReviewProxy.class, Cnd.where("id", "=", zbId));
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
un.id,
|
||||
un.unionname unionName,
|
||||
IFNULL(grading.gradingName,'未定级') AS gradingName,
|
||||
grading.isGrading,
|
||||
count( peo.id ) num
|
||||
FROM
|
||||
sys_union un
|
||||
LEFT JOIN `user` u ON u.unionId = un.id
|
||||
LEFT JOIN comment_peo peo ON peo.userId = u.id AND peo.zbId = @zbId
|
||||
LEFT JOIN comment_union_grading grading on un.id = grading.unionId AND grading.zbId = @zbId
|
||||
$condition
|
||||
""").setParam("zbId", zbId);
|
||||
Cnd cnd = Cnd.NEW();
|
||||
|
||||
if (Lang.isNotEmpty(zb.getUnionIds())) {
|
||||
cnd.and("un.id", "in", zb.getUnionIds());
|
||||
} else {
|
||||
if (AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
cnd.andEX("un.id", "=", unionId);
|
||||
} else {
|
||||
cnd.and("un.id", "=", SecurityUtil.getUnionId());
|
||||
}
|
||||
}
|
||||
|
||||
cnd.groupBy("un.id");
|
||||
cnd.desc("count( peo.id )");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = commentZbService.listPageMap(page.getPageNumber(), page.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("获取个人评议或工会评议列表")
|
||||
@SaCheckPermission("workershome.review.statistics")
|
||||
public Result getUserPeoByZbIdOrUnionId(PageForm page,
|
||||
@Param("zbId") String zbId,
|
||||
@Param("unionId") String unionId,
|
||||
@Param("reviewResult") String reviewResult) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
peo.*,
|
||||
u.loginname loginName,
|
||||
unitname unitName
|
||||
FROM
|
||||
comment_peo peo
|
||||
LEFT JOIN `user` u ON u.id = peo.userId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("peo.zbId", "=", zbId);
|
||||
cnd.andEX("u.unionId", "=", unionId);
|
||||
cnd.andEX("peo.reviewResult", "=", reviewResult);
|
||||
if (StrUtil.isNotBlank(page.getSearchKeyword())) {
|
||||
SqlExpressionGroup sqlExpressionGroup = new SqlExpressionGroup();
|
||||
sqlExpressionGroup.orLike("u.loginname", page.getSearchKeyword());
|
||||
sqlExpressionGroup.orLike("u.username", page.getSearchKeyword());
|
||||
cnd.and(sqlExpressionGroup);
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = commentZbService.listPageMap(page.getPageNumber(), page.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("根据id获取评测内容")
|
||||
@SaCheckPermission("workershome.review.statistics")
|
||||
public Result getBzById(String peoId) {
|
||||
NutMap map = commentPeoService.getBzById(peoId);
|
||||
return Result.success(map);
|
||||
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("获取评价结果数量")
|
||||
@SaCheckPermission("workershome.review.statistics")
|
||||
public Result getReviewResultNum(@Param("zbId") String zbId,
|
||||
@Param("unionId") String unionId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
SUM( CASE WHEN cp.reviewResult = '非常满意' THEN 1 ELSE 0 END ) AS fcmy,
|
||||
SUM( CASE WHEN cp.reviewResult = '满意' THEN 1 ELSE 0 END ) AS my,
|
||||
SUM( CASE WHEN cp.reviewResult = '良好' THEN 1 ELSE 0 END ) AS lh,
|
||||
SUM( CASE WHEN cp.reviewResult = '一般' THEN 1 ELSE 0 END ) AS yb
|
||||
FROM
|
||||
comment_peo cp
|
||||
LEFT JOIN `user` u ON u.id = cp.userId
|
||||
WHERE
|
||||
cp.zbId = @zbId
|
||||
AND u.unionId = @unionId
|
||||
""").setParam("zbId", zbId).setParam("unionId", unionId);
|
||||
sql.setCallback(Sqls.callback.map());
|
||||
dao.execute(sql);
|
||||
NutMap mapList = (NutMap) sql.getResult();
|
||||
return Result.success(mapList);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 分工会自评导出(单个)
|
||||
*
|
||||
* @param zbId
|
||||
* @param unionId
|
||||
* @param response
|
||||
*/
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("分工会自评导出(单个)")
|
||||
@SaCheckPermission("workershome.review.statistics")
|
||||
public void doDownLoadSingleByUnionId(String zbId, String unionId, HttpServletResponse response) {
|
||||
WorkersHomeReviewPeo peo = commentZbService.dao().fetch(WorkersHomeReviewPeo.class, Cnd.where("unionId", "=", unionId).and("zbId", "=", zbId));
|
||||
|
||||
String fileName = peo.getUnionName() + "(" + peo.getUserName() + ")“模范教工小家”评议结果";
|
||||
try {
|
||||
response.addHeader("Content-Type", "application/octet-stream");
|
||||
response.addHeader("Content-Disposition", "attachment; filename=\"" + new String(fileName.getBytes("UTF-8"), "ISO-8859-1") + "\".docx");
|
||||
commentStatisticsService.exportWord(peo, response.getOutputStream());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 分工会下所有测评结果导出(多个)压缩包
|
||||
*
|
||||
* @param zbId
|
||||
* @param unionId
|
||||
* @param response
|
||||
*/
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("分工会下所有测评结果导出(多个)压缩包")
|
||||
@SaCheckPermission("workershome.review.statistics")
|
||||
public void doDownLoadZipByUnionId(String zbId, String unionId, HttpServletResponse response) {
|
||||
try {
|
||||
List<WorkersHomeReviewPeo> peoList = commentPeoService.dao().query(WorkersHomeReviewPeo.class, Cnd.where("unionId", "=", unionId).and("zbId", "=", zbId));
|
||||
WorkersHomeReviewPeo commentPeo = peoList.stream().findFirst().orElse(new WorkersHomeReviewPeo());
|
||||
String zipName = commentPeo.getUnionName() + "评议结果.zip";
|
||||
response.setContentType("application/octet-stream");
|
||||
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(zipName, "UTF-8"));
|
||||
|
||||
ZipOutputStream zipOutputStream = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
|
||||
for (WorkersHomeReviewPeo peo : peoList) {
|
||||
String fileName = peo.getUnionName() + "(" + peo.getUserName() + ")“模范教工小家”评议结果.docx";
|
||||
zipOutputStream.putNextEntry(new ZipEntry(fileName));
|
||||
commentStatisticsService.exportWord(peo, zipOutputStream);
|
||||
zipOutputStream.closeEntry();
|
||||
response.flushBuffer();
|
||||
}
|
||||
zipOutputStream.flush();
|
||||
zipOutputStream.close();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 校验是否有附件
|
||||
*
|
||||
* @param peoId 测评结果Id
|
||||
* @param zbId 指标Id
|
||||
* @param unionId 分工会Id
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("校验是否有附件")
|
||||
@SaCheckPermission("workershome.review.statistics")
|
||||
public Result validateHasFiles(@Param("peoId") String peoId,
|
||||
@Param("zbId") String zbId,
|
||||
@Param("unionId") String unionId) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("id", "=", peoId);
|
||||
cnd.andEX("zbId", "=", zbId);
|
||||
cnd.andEX("unionId", "=", unionId);
|
||||
List<WorkersHomeReviewPeo> peoList = commentPeoService.dao().query(WorkersHomeReviewPeo.class, cnd);
|
||||
List<Sys_file> files;
|
||||
try {
|
||||
files = peoList.stream().flatMap(v -> v.getFiles().stream()).toList();
|
||||
} catch (NullPointerException e) {
|
||||
return Result.error();
|
||||
}
|
||||
if (Lang.isEmpty(files)) {
|
||||
return Result.error();
|
||||
} else {
|
||||
return Result.success();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 分工会导出附件
|
||||
*
|
||||
* @param zbId
|
||||
* @param unionId
|
||||
* @param response
|
||||
*/
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("分工会导出附件")
|
||||
@SaCheckPermission("workershome.review.statistics")
|
||||
public void exportFilesByUnionId(String zbId, String unionId, HttpServletResponse response) {
|
||||
List<WorkersHomeReviewPeo> peoList = commentPeoService.dao().query(WorkersHomeReviewPeo.class, Cnd.where("unionId", "=", unionId).and("zbId", "=", zbId));
|
||||
WorkersHomeReviewPeo commentPeo = peoList.stream().findFirst().orElse(new WorkersHomeReviewPeo());
|
||||
response.reset();
|
||||
response.setContentType("application/x-msdownload;charset=utf-8");
|
||||
|
||||
String tmpPath = "tmp/" + R.UU32();
|
||||
File tmpDir = new File(tmpPath + "/附件信息");
|
||||
tmpDir.mkdirs();
|
||||
|
||||
try {
|
||||
for (WorkersHomeReviewPeo peo : peoList) {
|
||||
String fileName = peo.getUnionName() + "(" + peo.getUserName() + ")";
|
||||
List<Sys_file> files = peo.getFiles();
|
||||
|
||||
File tDir = new File(tmpDir + "/" + fileName);
|
||||
tDir.mkdirs();
|
||||
|
||||
if (Lang.isNotEmpty(files)) {
|
||||
// for (Sys_file file : files) {
|
||||
// if (Lang.isNotEmpty(file)) {
|
||||
// FileOutputStream outputStream = new FileOutputStream(tDir.getPath() + "/" + file.getFilename());
|
||||
// ftpService.download(file.getFilepath(), outputStream);
|
||||
// outputStream.close();
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
String aimsDir = "zipTmp/" + R.UU32();
|
||||
String aimsName = commentPeo.getUnionName() + "评议信息.zip";
|
||||
String aimsPath = aimsDir + "/" + aimsName;
|
||||
// FileUtil.compressToZip(tmpDir.getPath(), aimsDir, aimsName);
|
||||
|
||||
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(aimsName, "UTF-8"));
|
||||
|
||||
File aimsFile = new File(aimsPath);
|
||||
FileInputStream inputStream = new FileInputStream(aimsFile);
|
||||
IOUtils.copy(inputStream, response.getOutputStream());
|
||||
inputStream.close();
|
||||
aimsFile.delete();
|
||||
|
||||
// FileUtil.deleteDir(new File(tmpPath));
|
||||
// FileUtil.deleteDir(new File(aimsDir));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 个人上传附件导出
|
||||
*
|
||||
* @param peoId
|
||||
* @param response
|
||||
*/
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("个人上传附件导出")
|
||||
@SaCheckPermission("workershome.review.statistics")
|
||||
public void exportFilesByPeoId(String peoId, HttpServletResponse response) {
|
||||
WorkersHomeReviewPeo peo = commentPeoService.dao().fetch(WorkersHomeReviewPeo.class, peoId);
|
||||
List<Sys_file> files = peo.getFiles();
|
||||
|
||||
response.reset();
|
||||
response.setContentType("application/x-msdownload;charset=utf-8");
|
||||
|
||||
String tmpPath = "tmp/" + R.UU32();
|
||||
File tmpDir = new File(tmpPath + "/个人附件信息");
|
||||
tmpDir.mkdirs();
|
||||
|
||||
try {
|
||||
for (Sys_file file : files) {
|
||||
// if (Lang.isNotEmpty(files)) {
|
||||
// FileOutputStream out = new FileOutputStream(tmpDir.getPath() + "/" + file.getFilename());
|
||||
// ftpService.download(file.getFilepath(), out);
|
||||
// out.close();
|
||||
// }
|
||||
}
|
||||
String aimsDir = "zipTmp/" + R.UU32();
|
||||
String aimsName = peo.getUnionName() + "(" + peo.getUserName() + ")个人附件信息.zip";
|
||||
String aimsPath = aimsDir + "/" + aimsName;
|
||||
// FileUtil.compressToZip(tmpDir.getPath(), aimsDir, aimsName);
|
||||
|
||||
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(aimsName, "UTF-8"));
|
||||
|
||||
File aimsFile = new File(aimsPath);
|
||||
FileInputStream inputStream = new FileInputStream(aimsFile);
|
||||
IOUtils.copy(inputStream, response.getOutputStream());
|
||||
inputStream.close();
|
||||
aimsFile.delete();
|
||||
|
||||
// FileUtil.deleteDir(new File(tmpPath));
|
||||
// FileUtil.deleteDir(new File(aimsDir));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 个人评议结果导出(得分)
|
||||
*
|
||||
* @param peoId
|
||||
* @param response
|
||||
*/
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("个人评议结果导出(得分)")
|
||||
@SaCheckPermission("workershome.review.statistics")
|
||||
public void exportByPeoId(String peoId, HttpServletResponse response) {
|
||||
WorkersHomeReviewPeo peo = commentPeoService.dao().fetch(WorkersHomeReviewPeo.class, peoId);
|
||||
|
||||
String fileName = peo.getUnionName() + "(" + peo.getUserName() + ")“模范教工小家”评议结果";
|
||||
try {
|
||||
response.addHeader("Content-Type", "application/octet-stream");
|
||||
response.addHeader("Content-Disposition", "attachment; filename=\"" + new String(fileName.getBytes("UTF-8"), "ISO-8859-1") + "\".docx");
|
||||
commentStatisticsService.exportWord(peo, response.getOutputStream());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 导出所有分工会评议结果和附件信息
|
||||
*
|
||||
* @param zbId
|
||||
* @param response
|
||||
*/
|
||||
@At
|
||||
@Ok("void")
|
||||
@SaCheckPermission("workershome.review.statistics")
|
||||
public void exportAllUnions(String zbId, HttpServletResponse response) {
|
||||
// List<CommentPeo> peoList = commentPeoService.dao().query(CommentPeo.class, Cnd.where("zbId", "=", zbId));
|
||||
|
||||
// Map<String, List<CommentPeo>> collect = peoList.stream().collect(Collectors.groupingBy(CommentPeo::getUnionId));
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("评级")
|
||||
@SaCheckPermission("workershome.review.statistics")
|
||||
public Result doGrading(WorkersHomeReviewGrading grading){
|
||||
if (StrUtil.isAllBlank(grading.getProxyId(),grading.getUnionId(),grading.getGradingName())) {
|
||||
return Result.error("必要参数为空");
|
||||
}
|
||||
commentPeoService.dao().update(WorkersHomeReviewGrading.class,
|
||||
Chain.make("isGrading",true).add("gradingName",grading.getGradingName()).add("gradingTime", DateUtil.now()),
|
||||
Cnd.where("zbId","=",grading.getProxyId()).and("unionId","=",grading.getUnionId()));
|
||||
return Result.success();
|
||||
}
|
||||
}
|
||||
+165
@@ -0,0 +1,165 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.controller.review;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewNorm;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewContent;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewProxy;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentBzService;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentNrService;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentZbService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.Strings;
|
||||
import org.nutz.lang.random.R;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName viewZbController
|
||||
* @Description TODO
|
||||
* @Author zhf
|
||||
* @Date 2023/9/4 16:00
|
||||
*/
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@ApiOperation("指标查看")
|
||||
@At("/platform/workershome/review/view")
|
||||
public class WorkersHomeReviewViewController {
|
||||
|
||||
|
||||
@Inject
|
||||
private CommentZbService commentZbService;
|
||||
|
||||
@Inject
|
||||
private CommentNrService commentNrService;
|
||||
|
||||
@Inject
|
||||
private CommentBzService commentBzService;
|
||||
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/workershome/review/khzb.html")
|
||||
@SaCheckPermission("workerhome.review.view")
|
||||
public void index() {
|
||||
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("指标查看分页数据")
|
||||
@SaCheckPermission("workerhome.review.view")
|
||||
public Result pageData(@Param("annual") String annual,
|
||||
@Param("assessment") String assessment,
|
||||
int pageNumber, int pageSize) {
|
||||
Sql sql = Sqls.create("SELECT * FROM `comment_zb` $condition");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (Strings.isNotBlank(annual) && Strings.isNotBlank(annual)) {
|
||||
cnd.and("annual", "=", annual);
|
||||
}
|
||||
if (Strings.isNotBlank(assessment) && Strings.isNotBlank(assessment)) {
|
||||
cnd.where().andLike("assessment", assessment);
|
||||
} else {
|
||||
cnd.desc("annual");
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = commentZbService.listPageMap(pageNumber, pageSize, sql);
|
||||
return Result.success().addData(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("指标删除")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("workerhome.review.view")
|
||||
@SLog(tag = "指标删除", msg = "指标删除id: ${args[0]}")
|
||||
public Result delete(String id) {
|
||||
commentZbService.delete(id);
|
||||
List<WorkersHomeReviewContent> query = commentNrService.query(Cnd.where("zb_id", "=", id));
|
||||
|
||||
if (Lang.isNotEmpty(query)) {
|
||||
List<String> nrIds = query.stream().map(WorkersHomeReviewContent::getId).toList();
|
||||
commentBzService.clear(Cnd.where("nr_id", "in", nrIds));
|
||||
}
|
||||
commentNrService.clear(Cnd.where("zb_id", "=", id));
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("获取编辑内容")
|
||||
@SaCheckPermission("workerhome.review.view")
|
||||
@SLog(tag = "获取编辑内容", msg = "编辑内容id: ${args[0]}")
|
||||
public Result edit(String id) {
|
||||
WorkersHomeReviewProxy khzb = commentZbService.khzb(id);
|
||||
return Result.success().addData(khzb);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("指标编辑")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("workerhome.review.view")
|
||||
@SLog(tag = "指标编辑", msg = "指标编辑id: ${args[0]}")
|
||||
public Result doEdit(@Param("kh_zb") WorkersHomeReviewProxy commentZb) {
|
||||
commentZbService.updateIgnoreNull(commentZb);
|
||||
|
||||
List<WorkersHomeReviewContent> query = commentNrService.query(Cnd.where("zb_id", "=", commentZb.getId()));
|
||||
|
||||
if (Lang.isNotEmpty(query)) {
|
||||
List<String> nrIds = query.stream().map(WorkersHomeReviewContent::getId).toList();
|
||||
commentBzService.clear(Cnd.where("nr_id", "in", nrIds));
|
||||
}
|
||||
|
||||
commentNrService.clear(Cnd.where("zb_id", "=", commentZb.getId()));
|
||||
List<WorkersHomeReviewContent> nrs = commentZb.getReviewContents();
|
||||
if (Lang.isNotEmpty(nrs)){
|
||||
nrs.forEach(v->{
|
||||
if (v.getId() == null) {
|
||||
v.setId(R.UU32());
|
||||
}
|
||||
Chain chain = Chain.make("id", v.getId());
|
||||
chain.add("zb_id",commentZb.getId());
|
||||
chain.add("content",v.getContent());
|
||||
chain.add("contentNumber",v.getContentNumber());
|
||||
chain.add("remark",v.getRemark());
|
||||
commentNrService.dao().insert(WorkersHomeReviewContent.class, chain);
|
||||
|
||||
List<WorkersHomeReviewNorm> bzs = v.getReviewNorms();
|
||||
bzs.forEach(b->{
|
||||
if (b.getId() == null) {
|
||||
b.setId(R.UU32());
|
||||
}
|
||||
Chain bzChain = Chain.make("id", b.getId());
|
||||
bzChain.add("nr_id",v.getId());
|
||||
bzChain.add("inspection",b.getInspection());
|
||||
bzChain.add("score",b.getScore());
|
||||
bzChain.add("single_score",b.getSingleScore());
|
||||
bzChain.add("zb_id",commentZb.getId());
|
||||
bzChain.add("contentNumber",b.getContentNumber());
|
||||
commentNrService.dao().insert(WorkersHomeReviewNorm.class, bzChain);
|
||||
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
commentZbService.setGrading(commentZb);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+301
@@ -0,0 +1,301 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.h5controller;
|
||||
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
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.base.service.BaseService;
|
||||
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.workershome.model.review.WorkersHomeReviewNorm;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewPeo;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewResult;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentPeoService;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentZbService;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.vo.WakesHomeVo;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
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.IocBean;
|
||||
import org.nutz.lang.Strings;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@IocBean
|
||||
@At("/mobile/workershome/review/appraisal")
|
||||
@Ok("json:full")
|
||||
public class MWorkersHomeReviewController {
|
||||
|
||||
@Inject
|
||||
private CommentZbService commentZbService;
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
|
||||
@Inject
|
||||
private CommentPeoService commentPeoService;
|
||||
|
||||
@At
|
||||
@Ok("beetl:/mobile/workershome/review/appraisal.html")
|
||||
@SaCheckLogin
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("beetl:/mobile/workershome/review/commentator.html")
|
||||
@SaCheckLogin
|
||||
public void commentator() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Ok("beetl:/mobile/workershome/review/mine.html")
|
||||
@SaCheckLogin
|
||||
public void mine() {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 民主测评首页展示
|
||||
*
|
||||
* @param pageForm
|
||||
* @param annual
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@SaCheckPermission
|
||||
public Object pageData(PageForm pageForm,
|
||||
@Param("annual") String annual,
|
||||
@Param("type") Integer type) {
|
||||
Sql sql = Sqls.create("SELECT * FROM `comment_zb` $condition");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (Strings.isNotBlank(annual) && Strings.isNotBlank(annual)) {
|
||||
cnd.and("annual", "=", annual);
|
||||
}
|
||||
switch (type) {
|
||||
//进行中
|
||||
case 2 -> cnd.and(new Static("now() >= startTime and now() <= endTime"));
|
||||
//已结束
|
||||
case 3 -> cnd.and(new Static("now() > endTime"));
|
||||
//未开始
|
||||
case 4 -> cnd.and(new Static("now() < startTime"));
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = commentZbService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
List<NutMap> list = pagination.getList();
|
||||
List<Sys_union> unionList = commentZbService.dao().query(Sys_union.class, Cnd.NEW());
|
||||
list.forEach(v -> {
|
||||
//自评模式
|
||||
boolean reviewMode = v.getInt("reviewMode") == 1;
|
||||
if (reviewMode && v.getInt("commentTarget") == 1) {
|
||||
//校工会自评,判断有没有校工会管理员的权限
|
||||
v.put("canJoin", AuthUtil.hasRole(RoleConstant.SCHOOL_UNION_ADMIN.name()));
|
||||
} else if (reviewMode && v.getInt("commentTarget") == 2) {
|
||||
//分工会自评,判断有没有分工会管理员
|
||||
v.put("canJoin", AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name()));
|
||||
}
|
||||
|
||||
//自选分工会的模式
|
||||
if (StrUtil.isNotBlank(v.getString("unionIds"))) {
|
||||
List<String> unionIdList = JSONUtil.parseArray(v.getString("unionIds")).toList(String.class);
|
||||
String string = unionList.stream().filter(item -> unionIdList.contains(item.getId()))
|
||||
.map(Sys_union::getName).collect(Collectors.joining(","));
|
||||
v.put("unionNames", string);
|
||||
//如果是自评,只有分工会主席才能自评
|
||||
if (reviewMode) {
|
||||
v.put("canJoin", (unionIdList.contains(SecurityUtil.getUnionId()) && AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name())));
|
||||
} else {
|
||||
v.put("canJoin", unionIdList.contains(SecurityUtil.getUnionId()));
|
||||
}
|
||||
}
|
||||
});
|
||||
return pagination;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 根据id获取测评内容
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@SaCheckPermission
|
||||
public Object getById(String id) {
|
||||
return commentZbService.khzb(id);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public Object doSubmit(WakesHomeVo wakesHomeVo) {
|
||||
try {
|
||||
View_user user = baseService.dao().fetch(View_user.class, Cnd.where("id", "=", SecurityUtil.getUserId()));
|
||||
WorkersHomeReviewPeo peo = new WorkersHomeReviewPeo();
|
||||
if (Strings.isNotBlank(wakesHomeVo.getEvaluatedPersonId())) {
|
||||
peo.setEvaluatedPersonId(wakesHomeVo.getEvaluatedPersonId());
|
||||
peo.setEvaluatedPersonName(wakesHomeVo.getEvaluatedPersonName());
|
||||
peo.setEvaluatedPersonType(wakesHomeVo.getEvaluatedPersonType());
|
||||
}
|
||||
peo.setReviewResult(wakesHomeVo.getReviewResult());
|
||||
peo.setProxyId(wakesHomeVo.getId());
|
||||
peo.setReviewTime(DateUtil.now());
|
||||
// peo.setFiles(wakesHomeVo.getFiles());
|
||||
peo.setUserId(user.getId());
|
||||
peo.setUserName(user.getUsername());
|
||||
peo.setUnionId(user.getUnionId());
|
||||
peo.setUnionName(user.getUnionName());
|
||||
if (Strings.isNotBlank(wakesHomeVo.getPresidentOpinions())) {
|
||||
peo.setPresidentOpinions(wakesHomeVo.getPresidentOpinions());
|
||||
}
|
||||
baseService.dao().insert(peo);
|
||||
List<WorkersHomeReviewResult> commentResults = new ArrayList<>();
|
||||
for (WorkersHomeReviewNorm v : wakesHomeVo.getBzList()) {
|
||||
WorkersHomeReviewResult result = new WorkersHomeReviewResult();
|
||||
result.setProxyId(v.getId());
|
||||
result.setAssessResult(v.getResultScore());
|
||||
result.setRecommendation(v.getOptions() != null ? v.getOptions() : null);
|
||||
result.setPeoId(peo.getId());
|
||||
commentResults.add(result);
|
||||
}
|
||||
baseService.dao().insert(commentResults);
|
||||
return Result.success();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
throw new RuntimeException();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 判断是否测评过
|
||||
*
|
||||
* @param id 指标id
|
||||
* @param evaluatedPersonId 被测评人id
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
public Object isAssess(@Param("id") String id,
|
||||
@Param("evaluatedPersonId") String evaluatedPersonId) {
|
||||
//主席测评
|
||||
if (Strings.isNotBlank(evaluatedPersonId)) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("evaluatedPersonId", "=", evaluatedPersonId);
|
||||
cnd.and("userId", "=", SecurityUtil.getUserId());
|
||||
cnd.and("zbId", "=", id);
|
||||
return Result.success().addData(baseService.dao().count(WorkersHomeReviewPeo.class, cnd));
|
||||
} else {//会员评家测评
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
cp.*,
|
||||
cz.annual,
|
||||
cz.assessment,
|
||||
cz.assessmentMode,
|
||||
cz.scoringMode,
|
||||
cz.commentTarget
|
||||
FROM
|
||||
`comment_peo` cp
|
||||
LEFT JOIN `comment_zb` cz ON cz.id = cp.zbId
|
||||
where cp.zbId=@zbId and cp.userId=@userId
|
||||
""").setParam("zbId", id).setParam("userId", SecurityUtil.getUserId());
|
||||
List<NutMap> list = baseService.listMap(sql);
|
||||
NutMap nutMap = list.stream().findFirst().orElse(null);
|
||||
if (nutMap != null && Strings.isNotBlank(nutMap.getString("commentTarget")) && "1".equals(nutMap.getString("assessmentMode"))) {
|
||||
return Result.success().addData(1);
|
||||
} else {
|
||||
return Result.success().addData(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 我的测评页面展示
|
||||
*
|
||||
* @param pageForm
|
||||
* @param annual
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
public Object onLoad(PageForm pageForm,
|
||||
@Param("annual") String annual) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
cp.*,
|
||||
cz.annual,
|
||||
cz.assessment,
|
||||
cz.assessmentMode,
|
||||
cz.scoringMode,
|
||||
cz.commentTarget
|
||||
FROM
|
||||
`comment_peo` cp
|
||||
LEFT JOIN `comment_zb` cz ON cz.id = cp.zbId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("cz.annual", "=", annual);
|
||||
cnd.and("cp.userId", "=", SecurityUtil.getUserId());
|
||||
cnd.desc("cp.reviewTime");
|
||||
sql.setCondition(cnd);
|
||||
return baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取测评结果信息
|
||||
*
|
||||
* @param peoId
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
public Object getBzById(@Param("peoId") String peoId) {
|
||||
return commentPeoService.getBzById(peoId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取分工会主席和副主席
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
public Object getPresidents() {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
u.id,
|
||||
u.loginname,
|
||||
u.username,
|
||||
sr.`name` evaluatedPersonType,
|
||||
GROUP_CONCAT( DISTINCT u.username, '(', sr.`name`, ')' ) presidents
|
||||
FROM
|
||||
`user` u
|
||||
LEFT JOIN `sys_user_role` sur ON u.id = sur.userId
|
||||
LEFT JOIN `sys_role` sr ON sur.roleId = sr.id
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("sr.`code`", "in", List.of(RoleConstant.BRANCH_UNION_CHAIRMAN.name(), RoleConstant.BRANCH_UNION_VICE_CHAIRMAN.name()));
|
||||
cnd.and("u.unionid", "=", SecurityUtil.getUnionId());
|
||||
cnd.groupBy("u.id");
|
||||
cnd.asc("u.loginname");
|
||||
sql.setCondition(cnd);
|
||||
return baseService.listMap(sql);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,130 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.model;
|
||||
|
||||
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 org.nutz.dao.interceptor.annotation.PrevInsert;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author mayn
|
||||
*/
|
||||
@Data
|
||||
@Table
|
||||
@Comment("职工小家-职工小家表")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class WorkersHome extends BaseModel {
|
||||
|
||||
@Name
|
||||
@Column
|
||||
@Comment("ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("填报人")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String username;
|
||||
|
||||
@Column
|
||||
@Comment("联系方式")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String mobile;
|
||||
|
||||
@Column
|
||||
@Comment("所属工会id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String unionId;
|
||||
|
||||
@Column
|
||||
@Comment("工会名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String unionName;
|
||||
|
||||
@Column
|
||||
@Comment("填报时间")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String applyTime;
|
||||
|
||||
@Column
|
||||
@Comment("填报类别(校工会/分工会)")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 10)
|
||||
private String category;
|
||||
|
||||
@Column
|
||||
@Comment("创办时间")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String foundTime;
|
||||
|
||||
@Column
|
||||
@Comment("单位位置")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String position;
|
||||
|
||||
@Column
|
||||
@Comment("单位面积")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 10)
|
||||
private String area;
|
||||
|
||||
@Column
|
||||
@Comment("单位信息")
|
||||
@ColDefine(type = ColType.TEXT)
|
||||
private String details;
|
||||
|
||||
@Column
|
||||
@Comment("获奖情况")
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
private List<AwardInfo> awardInfo;
|
||||
|
||||
@Column
|
||||
@Comment("图片文件")
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
private List<JSONObject> picFiles;
|
||||
|
||||
@Column
|
||||
@Comment("附件")
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
private List<JSONObject> files;
|
||||
|
||||
@Column
|
||||
@Comment("分工会审核id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String unionAuditId;
|
||||
|
||||
@Column
|
||||
@Comment("校工会审核id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String schoolAuditId;
|
||||
|
||||
@Column
|
||||
@Comment("状态")
|
||||
@ColDefine(type = ColType.INT)
|
||||
private Integer state;
|
||||
|
||||
|
||||
@Data
|
||||
public static class AwardInfo implements Serializable {
|
||||
/**
|
||||
* 获奖日期
|
||||
*/
|
||||
private String awardTime;
|
||||
/**
|
||||
* 获奖单位
|
||||
*/
|
||||
private String awardUnit;
|
||||
/**
|
||||
* 奖项名称
|
||||
*/
|
||||
private String awardName;
|
||||
/**
|
||||
* 奖项照片
|
||||
*/
|
||||
private String awardPic;
|
||||
}
|
||||
|
||||
}
|
||||
+130
@@ -0,0 +1,130 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.model;
|
||||
|
||||
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 org.nutz.dao.interceptor.annotation.PrevInsert;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:WakesHomeApply
|
||||
* @Date 2024/7/31 10:47
|
||||
* @注释 职工之家申报
|
||||
*/
|
||||
@Data
|
||||
@Table
|
||||
@Comment("职工之家申报")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class WorkersHomeApply extends BaseModel implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Column
|
||||
@Name
|
||||
@Comment("id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("申报人id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String userId;
|
||||
|
||||
@Column
|
||||
@Comment("申报人工号")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String loginName;
|
||||
|
||||
@Column
|
||||
@Comment("申报人姓名")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String username;
|
||||
|
||||
@Column
|
||||
@Comment("申报人单位id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String unitId;
|
||||
|
||||
@Column
|
||||
@Comment("申报人单位名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String unitName;
|
||||
|
||||
@Column
|
||||
@Comment("申报人工会Id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String unionId;
|
||||
|
||||
@Column
|
||||
@Comment("申报人工会名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String unionName;
|
||||
|
||||
@Column
|
||||
@Comment("联系电话")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String mobile;
|
||||
|
||||
@Column
|
||||
@Comment("基本情况简介(500字内)")
|
||||
@ColDefine(type = ColType.TEXT)
|
||||
private String basicInformation;
|
||||
|
||||
@Column
|
||||
@Comment("建设方案")
|
||||
@ColDefine(type = ColType.TEXT)
|
||||
private String constructionPlan;
|
||||
|
||||
@Column
|
||||
@Comment("基层党组织审核Id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String organizationAuditId;
|
||||
|
||||
@Column
|
||||
@Comment("校工会审核Id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String schoolAuditId;
|
||||
|
||||
//10000待提交;10010待基层党组织审核;10020待校工会审核;10030审核通过
|
||||
@Column
|
||||
@Comment("当前状态")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 10)
|
||||
private String state;
|
||||
|
||||
@Column
|
||||
@Comment("申报时间")
|
||||
@ColDefine(type = ColType.DATE)
|
||||
private String applyDate;
|
||||
|
||||
@Column
|
||||
@Comment("创办时间")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String foundTime;
|
||||
|
||||
@Column
|
||||
@Comment("单位位置")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String position;
|
||||
|
||||
@Column
|
||||
@Comment("单位面积")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 10)
|
||||
private String area;
|
||||
|
||||
@Column
|
||||
@Comment("单位信息")
|
||||
@ColDefine(type = ColType.TEXT)
|
||||
private String details;
|
||||
|
||||
@Column
|
||||
@Comment("附件")
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
private List<JSONObject> files;
|
||||
}
|
||||
+95
@@ -0,0 +1,95 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.model;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import com.budwk.app.sys.models.Sys_file;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
import org.nutz.dao.interceptor.annotation.PrevInsert;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:WakesHomeDataRevel
|
||||
* @Date 2024/7/30 15:29
|
||||
* @注释 职工建家资料管理
|
||||
*/
|
||||
@Data
|
||||
@Table
|
||||
@Comment("职工建家资料管理")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class WorkersHomeDataRevel extends BaseModel {
|
||||
|
||||
@Name
|
||||
@Comment("id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("资料名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String revelName;
|
||||
|
||||
@Column
|
||||
@Comment("上传人id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String userId;
|
||||
|
||||
@Column
|
||||
@Comment("上传人工号")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String loginName;
|
||||
|
||||
@Column
|
||||
@Comment("上传人姓名")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String username;
|
||||
|
||||
@Column
|
||||
@Comment("上传人单位id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String unitId;
|
||||
|
||||
@Column
|
||||
@Comment("上传人单位名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String unitName;
|
||||
|
||||
@Column
|
||||
@Comment("上传人工会id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String unionId;
|
||||
|
||||
@Column
|
||||
@Comment("上传人工会名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String unionName;
|
||||
|
||||
@Column
|
||||
@Comment("资料归属分工会id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String belongToUnionId;
|
||||
|
||||
@Column
|
||||
@Comment("资料归属分工会名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String belongToUnionName;
|
||||
|
||||
@Column
|
||||
@Comment("上传时间")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 20)
|
||||
private String time;
|
||||
|
||||
@Column
|
||||
@Comment("类型Id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String typeId;
|
||||
|
||||
@Column
|
||||
@Comment("附件")
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
private List<Sys_file> files;
|
||||
}
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.model;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
import org.nutz.dao.interceptor.annotation.PrevInsert;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:WakesHomeDataType
|
||||
* @Date 2024/7/30 15:29
|
||||
* @注释 职工建家资料类型管理
|
||||
*/
|
||||
@Data
|
||||
@Table
|
||||
@Comment("职工建家资料类型管理")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class WorkersHomeDataType extends BaseModel {
|
||||
|
||||
@Name
|
||||
@Comment("id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("类型编码")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 10)
|
||||
private String code;
|
||||
|
||||
@Column
|
||||
@Comment("工作资料类型名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 80)
|
||||
private String typeName;
|
||||
|
||||
@Column
|
||||
@Comment("序号")
|
||||
@ColDefine(type = ColType.INT)
|
||||
private Integer serialNum;
|
||||
|
||||
}
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.model.review;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName CommentNr
|
||||
* @Description TODO
|
||||
* @Author zhf
|
||||
* @Date 2023/9/4 16:13
|
||||
*/
|
||||
@Data
|
||||
@Table
|
||||
@Comment("职工小家-评议内容")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class WorkersHomeReviewContent extends BaseModel {
|
||||
|
||||
@Column
|
||||
@Name
|
||||
@Comment("id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Prev(els = {@EL("uuid()")})
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("考核内容")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String content;
|
||||
|
||||
@Column
|
||||
@Comment("题号")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String contentNumber;
|
||||
|
||||
@Column
|
||||
@Comment("指标id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String proxyId;
|
||||
|
||||
@One(field = "proxyId",key = "id")
|
||||
private WorkersHomeReviewProxy reviewProxy;
|
||||
|
||||
@Many(field = "contentId")
|
||||
private List<WorkersHomeReviewNorm> reviewNorms;
|
||||
|
||||
@Column
|
||||
@Comment("排序字段")
|
||||
private Integer location;
|
||||
|
||||
@Column
|
||||
@Comment("备注")
|
||||
@ColDefine(type = ColType.TEXT)
|
||||
private String remark;
|
||||
}
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.model.review;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName CommentExport
|
||||
* @Description TODO
|
||||
* @Author zhf
|
||||
* @Date 2023/9/7 15:19
|
||||
*/
|
||||
@Data
|
||||
@Table
|
||||
@Comment("职工小家-评议导出")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class WorkersHomeReviewExport extends BaseModel {
|
||||
|
||||
|
||||
@Column
|
||||
@Name
|
||||
@Comment("id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Prev(els = {@EL("uuid()")})
|
||||
private String id;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("导出的名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String exportName;
|
||||
|
||||
// 指标id
|
||||
@Column
|
||||
@Comment("proxyIds")
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
private List<String> proxyIds;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("创建时间")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 20)
|
||||
private String createTime;
|
||||
|
||||
|
||||
}
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.model.review;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:CommentUnionGrading
|
||||
* @Date 2024/9/19 8:48
|
||||
* @注释 校工会给分工会定级
|
||||
*/
|
||||
@Data
|
||||
@Table
|
||||
@Comment("校工会给分工会定级表")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class WorkersHomeReviewGrading extends BaseModel {
|
||||
|
||||
@Column
|
||||
@Name
|
||||
@Comment("id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Prev(els = {@EL("uuid()")})
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("考核指标id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String proxyId;
|
||||
|
||||
@Column
|
||||
@Comment("定级的分工会id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String unionId;
|
||||
|
||||
@Column
|
||||
@Comment("分工会名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String unionName;
|
||||
|
||||
@Column
|
||||
@Comment("分工会编码")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String unionCode;
|
||||
|
||||
@Column
|
||||
@Comment("定级的名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String gradingName;
|
||||
|
||||
@Column
|
||||
@Default("0")
|
||||
@Comment("是否定级")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
private Boolean isGrading;
|
||||
|
||||
@Column
|
||||
@Comment("定级时间")
|
||||
@ColDefine(type = ColType.DATETIME)
|
||||
private Date gradingTime;
|
||||
|
||||
}
|
||||
+97
@@ -0,0 +1,97 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.model.review;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
|
||||
/**
|
||||
* @ClassName CommentBz
|
||||
* @Description TODO
|
||||
* @Author zhf
|
||||
* @Date 2023/9/4 16:24
|
||||
* 职工小家评议标准
|
||||
*/
|
||||
@Data
|
||||
@Table
|
||||
@Comment("职工小家-评议标准")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class WorkersHomeReviewNorm extends BaseModel {
|
||||
|
||||
@Column
|
||||
@Name
|
||||
@Comment("id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Prev(els = {@EL("uuid()")})
|
||||
private String id;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("内容id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String contentId;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("考核标准")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 500)
|
||||
private String inspection;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("是否启用佐证材料")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
private boolean isEvidence;
|
||||
|
||||
@Column
|
||||
@Comment("标准分")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String score;
|
||||
|
||||
@Column
|
||||
@Comment("单项得分")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String singleScore;
|
||||
|
||||
@Column
|
||||
@Comment("自评能否超过最高分")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
private boolean beyondHighestScore;
|
||||
|
||||
@Column
|
||||
@Comment("关联模块")
|
||||
@ColDefine(type = ColType.VARCHAR,width = 100)
|
||||
private String associatedModule;
|
||||
|
||||
@Column
|
||||
@Comment("标准标识")
|
||||
@ColDefine(type = ColType.VARCHAR,width = 100)
|
||||
private String normRelationId;
|
||||
|
||||
@Column
|
||||
@Comment("指标id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String proxyId;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("题号")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String contentNumber;
|
||||
|
||||
@Column
|
||||
@Comment("排序字段")
|
||||
private Integer location;
|
||||
|
||||
@Column
|
||||
@Comment("能否删除该项")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
private boolean canDelete;
|
||||
|
||||
@One(field = "contentId", key = "id")
|
||||
private WorkersHomeReviewContent reviewContent;
|
||||
|
||||
private String resultScore;
|
||||
|
||||
private String options;
|
||||
}
|
||||
+93
@@ -0,0 +1,93 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.model.review;
|
||||
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import com.budwk.app.sys.models.Sys_file;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author mayn
|
||||
*/
|
||||
@Data
|
||||
@Table
|
||||
@Comment("职工小家-测评人记录")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class WorkersHomeReviewPeo extends BaseModel {
|
||||
|
||||
@Column
|
||||
@Name
|
||||
@Comment("id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Prev(els = {@EL("uuid()")})
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("测评人")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String userId;
|
||||
|
||||
@Column
|
||||
@Comment("测评人姓名")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String userName;
|
||||
|
||||
@Column
|
||||
@Comment("测评人工会id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String unionId;
|
||||
|
||||
@Column
|
||||
@Comment("测评人工会名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String unionName;
|
||||
|
||||
@Column
|
||||
@Comment("被测评人id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String evaluatedPersonId;
|
||||
|
||||
@Column
|
||||
@Comment("被测评人姓名")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 20)
|
||||
private String evaluatedPersonName;
|
||||
|
||||
@Column
|
||||
@Comment("被测评人职务(主席/副主席)")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 10)
|
||||
private String evaluatedPersonType;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("指标id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String proxyId;
|
||||
|
||||
@Column
|
||||
@Comment("主席测评意见")
|
||||
@ColDefine(type = ColType.TEXT)
|
||||
private String presidentOpinions;
|
||||
|
||||
@Column
|
||||
@Comment("评测结果")
|
||||
@ColDefine(type = ColType.VARCHAR,width = 10)
|
||||
private String reviewResult;
|
||||
|
||||
@Column
|
||||
@Comment("测评时间")
|
||||
@ColDefine(type = ColType.VARCHAR,width = 20)
|
||||
private String reviewTime;
|
||||
|
||||
|
||||
@Many(field = "peoId")
|
||||
private List<WorkersHomeReviewResult> resultList;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("自我测评的附件")
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
private List<Sys_file> files;
|
||||
}
|
||||
+96
@@ -0,0 +1,96 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.model.review;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName CommentZb
|
||||
* @Description TODO
|
||||
* @Author zhf
|
||||
* @Date 2023/9/4 15:39
|
||||
* 评议指标
|
||||
*/
|
||||
@Data
|
||||
@Table
|
||||
@Comment("职工小家-评议指标")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class WorkersHomeReviewProxy extends BaseModel {
|
||||
|
||||
@Column
|
||||
@Name
|
||||
@Comment("id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Prev(els = {@EL("uuid()")})
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("年度")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String annual;
|
||||
|
||||
@Column
|
||||
@Comment("考核名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String assessment;
|
||||
|
||||
@Column
|
||||
@Comment("添加时间")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String addTime;
|
||||
|
||||
@Column
|
||||
@Comment("评议选项(1.工会评家2.主席评家)")
|
||||
@ColDefine(type = ColType.INT)
|
||||
private Integer assessmentMode;
|
||||
|
||||
@Column
|
||||
@Comment("可报名范围组别")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private Integer activityGroupId;
|
||||
|
||||
@Column
|
||||
@Comment("评议范围(1.校工会 2.全部分工会 3.自选分工会)")
|
||||
@ColDefine(type = ColType.INT)
|
||||
private Integer commentTarget;
|
||||
|
||||
@Column
|
||||
@Comment("打分模式(1.评分模式2.选择满意不满意模式)")
|
||||
@ColDefine(type = ColType.INT)
|
||||
private Integer scoringMode;
|
||||
|
||||
|
||||
@Many(field = "proxyId")
|
||||
private List<WorkersHomeReviewContent> reviewContents;
|
||||
|
||||
@Column
|
||||
@Comment("排序字段")
|
||||
private Integer location;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("自选分工会Id")
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
private List<String> unionIds;
|
||||
|
||||
@Column
|
||||
@Comment("评议开始时间")
|
||||
@ColDefine(type = ColType.DATETIME)
|
||||
private Date startTime;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("评议结束时间")
|
||||
@ColDefine(type = ColType.DATETIME)
|
||||
private Date endTime;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("评议模式(1.自评模式 2.教职工评议)")
|
||||
@ColDefine(type = ColType.INT)
|
||||
private Integer reviewMode;
|
||||
}
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.model.review;
|
||||
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
|
||||
/**
|
||||
* @author mayn
|
||||
*/
|
||||
@Data
|
||||
@Table
|
||||
@Comment("职工小家-评测结果表")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class WorkersHomeReviewResult extends BaseModel {
|
||||
|
||||
@Column
|
||||
@Name
|
||||
@Comment("id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Prev(els = {@EL("uuid()")})
|
||||
private String id;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("测评人表id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String peoId;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("测评标准id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String proxyId;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("测评分数/满意度")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 10)
|
||||
private String assessResult;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("会员评家意见或建议")
|
||||
@ColDefine(type = ColType.TEXT)
|
||||
private String recommendation;
|
||||
|
||||
|
||||
@One(field = "peoId",key = "id")
|
||||
private WorkersHomeReviewPeo reviewPeo;
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
package com.budwk.app.zhgh.dayofficework.workershome.service;
|
||||
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.dayofficework.workershome.model.WorkersHomeApply;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:WorkersHomeApplyService
|
||||
* @Date 2024/7/31 11:09
|
||||
* @注释
|
||||
*/
|
||||
public interface WorkersHomeApplyService extends BaseService<WorkersHomeApply> {
|
||||
|
||||
/**
|
||||
* 根据id获取信息
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
NutMap findById(String id);
|
||||
|
||||
/**
|
||||
* 设置参数
|
||||
* @param wakesHomeApply
|
||||
*/
|
||||
void setParams(WorkersHomeApply wakesHomeApply);
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user